home *** CD-ROM | disk | FTP | other *** search
/ Internet Tools (InfoMagic) / Internet Tools.iso / applic / ncsa / tn3270 / wmac.assemble.Z / wmac.assemble
Text File  |  1989-11-18  |  201KB  |  2,481 lines

  1. WMAC     TITLE 'Program to Transfer a CMS File to a Macintosh'          00000001
  2. WMAC     CSECT                                                          00000002
  3.          EXTRN CRCTAB,SCRIO                                             00000003
  4.          PRINT NOGEN                                                    00000004
  5.          REGEQU                                                         00000005
  6.          USING *,R15                                                    00000006
  7.          STM   R0,R15,REGSAVE      SAVE ALL REGISTERS                   00000007
  8.          LR    R10,R15                                                  00000008
  9.          LA    R11,2048(R10)                                            00000009
  10.          LA    R11,2048(R11)                                            00000010
  11.          LA    R12,2048(R11)                                            00000011
  12.          LA    R12,2048(R12)                                            00000012
  13.          DROP  R15                                                      00000013
  14.          USING WMAC,R10,R11,R12    R10 - R12 = WCPM BASE REGISTERS      00000014
  15.          USING NUCON,0             ALSO ADDRESS NUCON                   00000015
  16.          SR    R15,R15                                                  00000016
  17.          ST    R15,RTNCODE         RETURN CODE INITIALIZED TO ZERO      00000017
  18.          ST    R15,RETRYCNT        TOTAL RETRY COUNT = 0                00000018
  19.          ST    R15,BUFSIZE         OUTPUT BUFFER EMPTY                  00000019
  20.          ST    R15,TOTCHRS         INITIALIZE TIMING DATA               00000020
  21.          ST    R15,TOTSECS                                              00000021
  22.          ST    R15,TOTSECS+4                                            00000022
  23.          MVI   FLAGS,0             ALL FLAGS = 0                        00000023
  24.          MVI   FLAGS2,0                                                 00000024
  25.          MVI   FLAGS3,0                                                 00000025
  26.          MVI   TRMFLAGS,0          ALSO TERMINAL FLAGS                  00000026
  27.          MVC   PCKSIZE(4),=F'1024' DEFAULT IS 1K PACKETS                00000027
  28.          BAL   R14,GETID           DEFINE LOCAL NODEID                  00000028
  29.          CLC   NODEID(8),BROWNID   CHECK FOR BROWN                      00000029
  30.          BNE   NOTBROWN            IF BROWN, SET FLAG BIT               00000030
  31.          OI    FLAGS3,ALTTR          FOR ALT. XLATE TABLES              00000031
  32. NOTBROWN MVC   VERSDATA(5),=C' 0000'  INITIALIZE VERSION DATA           00000032
  33.          MVC   XFSPEED(4),=C'0000' INITIALIZE TRANSFER RATE             00000033
  34.          LA    R9,INFILE           R9 -> INPUT FILE FSCB                00000034
  35.          USING FSCBD,R9                                                 00000035
  36.          MVC   FSCBFM(2),=CL2'*'   DEFAULT FM IS "*"                    00000036
  37.          MVC   DSKMODE(1),=CL2'*'                                       00000037
  38.          CLI   8(R1),X'FF'         ERROR IF FN OR FT MISSING            00000038
  39.          BE    BADID                                                    00000039
  40.          CLI   16(R1),X'FF'                                             00000040
  41.          BE    BADID                                                    00000041
  42.          MVC   FSCBFN(16),8(R1)    SAVE VALID FN AND FT                 00000042
  43.          CLI   FSCBFT,C'.'         FT BEGINS WITH A PERIOD?             00000043
  44.          BNE   KEEPFT              NO, KEEP FT AS IS                    00000044
  45.          MVC   FSCBFT(7),FSCBFT+1  SHIFT CHARACTERS OVER                00000045
  46.          MVI   FSCBFT+7,C' '       PUT BLANK AT END                     00000046
  47.          MVI   DELIM,C'.'          USE "." FOR MAC DELIMITER            00000047
  48. KEEPFT   EQU   *                                                        00000048
  49.          CLC   24(8,R1),=C'('      OPTIONS MAY START HERE ALSO          00000049
  50.          BE    HAVEID                                                   00000050
  51.          CLI   24(R1),X'FF'        SAVE FILEMODE IF GIVEN               00000051
  52.          BE    DOSTATE                                                  00000052
  53.          MVC   FSCBFM(2),24(R1)    SAVE CALLER'S FM                     00000053
  54.          MVC   DSKMODE(1),24(R1)                                        00000054
  55.          B     HAVEID                                                   00000055
  56.          EJECT                                                          00000056
  57. * SAVE AREA LOCATED HERE FOR ADDRESSABILITY                             00000057
  58. REGSAVE  DS    8D                  REGISTER SAVE AREA                   00000058
  59. RTNCODE  EQU   REGSAVE+60          RETURN CODE AT LOCATION FOR R15      00000059
  60.          SPACE                                                          00000060
  61. BADID    EQU   *                   FILE ID ERROR                        00000061
  62.          LINEDIT TEXT='DMSWMC054E Incomplete fileid specified',        X00000062
  63.                DISP=ERRMSG                                              00000063
  64.          MVI   RTNCODE+3,24                                             00000064
  65.          B     CMSRTN                                                   00000065
  66.          SPACE                                                          00000066
  67. HAVEID   EQU   *                   FSCB FILEID COMPLETE                 00000067
  68.          LA    R2,32(R1)           R2 = OPTION POINTER                  00000068
  69. OPTLOOP  EQU   *                   PROCESS OPTIONS                      00000069
  70.          CLC   0(8,R2),=8X'FF'          END AT X'FF'                    00000070
  71.          BE    OPTCHECK                                                 00000071
  72.          CLC   0(8,R2),=CL8')'          ALSO ")"                        00000072
  73.          BE    OPTCHECK                                                 00000073
  74.          CLC   0(8,R2),=CL8'('          SKIP "("                        00000074
  75.          BE    NEXTOPT                                                  00000075
  76.          LA    R5,8                     GET LENGTH IN R5                00000076
  77.          LA    R4,7(R2)                 R4 -> LAST BYTE                 00000077
  78. LENLOOP  EQU   *                        LOOP TO GET LENGTH              00000078
  79.          CLI   0(R4),C' '                    AT NON-BLANK?              00000079
  80.          BNE   HAVELEN                       YES, LENGTH IN R5          00000080
  81.          BCTR  R4,0                          R4 -> PREVIOUS BYTE        00000081
  82.          BCT   R5,LENLOOP                    DECREMENT & REPEAT         00000082
  83.          B     OPTERR                   ALL BLANK IS ERROR              00000083
  84.          SPACE                                                          00000084
  85. HAVELEN  BCTR  R5,0                     DECREMENT LENGTH FOR EX         00000085
  86.          LA    R4,OPTTAB                R4 -> OPTION TABLE              00000086
  87. TABCHECK EQU   *                        LOOK FOR MATCH IN TABLE         00000087
  88.          CLI   0(R4),X'FF'                   AT TABLE END?              00000088
  89.          BE    OPTERR                        YES, BAD OPTION            00000089
  90.          EX    R5,TABCLC                     FOUND A MATCH?             00000090
  91.          BE    USEOPT                        YES, HANDLE OPTION         00000091
  92.          LA    R4,12(R4)                     R4 -> NEXT OPTION          00000092
  93.          B     TABCHECK                      TRY AGAIN                  00000093
  94.          SPACE                                                          00000094
  95. USEOPT   L     R3,8(R4)                 GET ADDRESS OF ROUTINE          00000095
  96.          BR    R3                       EXECUTE CODE FOR OPTION         00000096
  97.          SPACE                                                          00000097
  98. NEXTOPT  EQU   *                        OPTION CODE RETURN HERE         00000098
  99.          LA    R2,8(R2)                 CHECK OUT NEXT TOKEN            00000099
  100.          B     OPTLOOP                                                  00000100
  101.          SPACE                                                          00000101
  102. TABCLC   CLC   0(*-*,R4),0(R2)     COMPARE TABLE ENTRY TO OPTION        00000102
  103.          SPACE                                                          00000103
  104. MENUOPT  NI    FLAGS,255-NOMENU    RESET FLAG                           00000104
  105.          B     NEXTOPT                                                  00000105
  106.          SPACE                                                          00000106
  107. NOMENOPT OI    FLAGS,NOMENU        SET FLAG                             00000107
  108.          B     NEXTOPT                                                  00000108
  109.          SPACE                                                          00000109
  110. ASCOPT   OI    FLAGS2,ASCXF        SET FLAG                             00000110
  111.          B     NEXTOPT                                                  00000111
  112.          SPACE                                                          00000112
  113. BINOPT   OI    FLAGS2,BINXF        SET FLAG                             00000113
  114.          B     NEXTOPT                                                  00000114
  115.          SPACE                                                          00000115
  116. NOASCOPT NI    FLAGS2,255-ASCXF    RESET FLAG                           00000116
  117.          B     NEXTOPT                                                  00000117
  118.          SPACE                                                          00000118
  119. NOBINOPT NI    FLAGS2,255-(BINXF+MACBIN)  RESET FLAGS                   00000119
  120.          B     NEXTOPT                                                  00000120
  121.          SPACE                                                          00000121
  122. TRUNCOPT OI    FLAGS,TRUNCATE+TEXT      SET FLAGS                       00000122
  123.          B     NEXTOPT                                                  00000123
  124.          SPACE                                                          00000124
  125. TEXTOPT  OI    FLAGS,TEXT               SET FLAG                        00000125
  126.          B     NEXTOPT                                                  00000126
  127.          SPACE                                                          00000127
  128. MACOPT   OI    FLAGS2,MACBIN+BINXF      SET FLAGS                       00000128
  129.          B     NEXTOPT                                                  00000129
  130.          SPACE                                                          00000130
  131. NOMACOPT NI    FLAGS2,255-MACBIN        RESET FLAG                      00000131
  132.          B     NEXTOPT                                                  00000132
  133.          SPACE                                                          00000133
  134. PRTOPT   OI    FLAGS2,PRTXF             SET FLAG                        00000134
  135.          B     NEXTOPT                                                  00000135
  136.          SPACE                                                          00000136
  137. NOPRTOPT NI    FLAGS2,255-PRTXF         RESET FLAG                      00000137
  138.          B     NEXTOPT                                                  00000138
  139.          SPACE                                                          00000139
  140. STDXOPT  NI    FLAGS3,255-ALTTR         RESET ALT. XLATE FLAG           00000140
  141.          B     NEXTOPT                                                  00000141
  142.          SPACE                                                          00000142
  143. OPTERR   LINEDIT TEXT='DMSWMC003E Invalid option ''........''',        X00000143
  144.                SUB=(CHARA,(R2)),DISP=ERRMSG                             00000144
  145.          MVI   RTNCODE+3,24                                             00000145
  146.          B     CMSRTN                                                   00000146
  147.          SPACE                                                          00000147
  148. OPTCHECK EQU   *                   CHECK FOR OPTION ERRORS              00000148
  149.          TM    FLAGS2,BINXF+ASCXF  BINARY AND ASCII BOTH SPECIFIED?     00000149
  150.          BNO   DOSTATE             NO, CONTINUE                         00000150
  151.          LINEDIT TEXT='DMSWMC066E ''ASCII'' and ''BINARY'' or ''MACBIN'X00000151
  152.                ' are conflicting options',DISP=ERRMSG                   00000152
  153.          MVI   RTNCODE+3,24                                             00000153
  154.          B     CMSRTN                                                   00000154
  155.          SPACE                                                          00000155
  156. DOSTATE  EQU   *                                                        00000156
  157.          FSSTATE FSCB=INFILE,ERROR=STATERR,FORM=E                       00000157
  158.          B     FILEOK                                                   00000158
  159.          SPACE                                                          00000159
  160. STATERR  EQU   *                   HANDLE ERRORS FROM STATE             00000160
  161.          ST    R15,RTNCODE         SAVE RETURN CODE                     00000161
  162.          C     R15,=F'36'          ERROR 36 IS DISK NOT ACCESSED        00000162
  163.          BE    NODISK                                                   00000163
  164.          C     R15,=F'28'          ELSE IF NOT 28, ASSUME STATE         00000164
  165.          BNE   CMSRTN                TYPED MESSAGE                      00000165
  166.          LINEDIT TEXT='DMSWMC002E File ''....................'' not fouX00000166
  167.                nd',DISP=ERRMSG,SUB=(CHAR8A,FSCBFN)                      00000167
  168.          MVI   RTNCODE+3,28                                             00000168
  169.          B     CMSRTN                                                   00000169
  170.          SPACE                                                          00000170
  171. NODISK   LINEDIT TEXT='DMSWMC069E Disk ''..'' not accessed',           X00000171
  172.                SUB=(CHARA,DSKMODE),DISP=ERRMSG                          00000172
  173.          B     CMSRTN                                                   00000173
  174.          SPACE                                                          00000174
  175. FILEOK   EQU   *                                                        00000175
  176. *                                  FILL-IN FSCB FROM FST                00000176
  177.          MVC   FSTCOPY(64),0(R1)   MAKE COPY OF FST                     00000177
  178.          LA    R1,FSTCOPY          R1 -> FST COPY                       00000178
  179.          USING FSTD,R1             ADDRESS FST FOR FILE                 00000179
  180.          MVC   FSCBFV(1),FSTRECFM  COPY RECFM FROM FSCB                 00000180
  181.          L     R2,FSTLRECL         R2 = RECORD LENGTH                   00000181
  182.          DROP  R1                  DONE WITH FST COPY                   00000182
  183.          LA    R2,9(R2)            ADD 7 + 2 FOR CR, LF                 00000183
  184.          SRL   R2,3                R2 = DOUBLEWORDS NEEDED              00000184
  185.          LR    R0,R2               COPY INTO R0                         00000185
  186.          DMSFREE DWORDS=(0),TYPE=USER,ERR=STGERR,MSG=NO                 00000186
  187.          STM   R0,R1,INPBUFDW      STORE SIZE, ADDRESS                  00000187
  188.          OI    FLAGS2,IOBUFF       REMEMBER FRET NEEDED                 00000188
  189.          B     TRMINIT             CONTINUE                             00000189
  190.          SPACE                                                          00000190
  191. STGERR   LINEDIT TEXT='DMSWMC109S Virtual storage capacity exceeded',  X00000191
  192.                DISP=ERRMSG                                              00000192
  193.          MVI   RTNCODE+3,104       RC = 104                             00000193
  194.          B     CMSRTN                                                   00000194
  195.          EJECT                                                          00000195
  196. *                                                                       00000196
  197. * PERFORM ONE-TIME INITIALIZATION                                       00000197
  198. *                                                                       00000198
  199. TRMINIT  BAL   R14,TERMTYPE        DETERMINE TERMINAL TYPE              00000199
  200.          OI    FLAGS2,TERMINIT     REMEMBER TERM INIT. DONE             00000200
  201.          TM    TRMFLAGS,MAC3270    MAC3270?                             00000201
  202.          BZ    INITCONT            NO, CONTINUE                         00000202
  203.          MVC   PCKSIZE(4),=F'2304' SET BIGGER PACKET SIZE               00000203
  204.          CLC   M3270VER+1(4),=C'0110'  NEW ENOUGH?                      00000204
  205.          BNL   INITCONT            YES, CONTINUE                        00000205
  206.          MVC   M3270VER(2),M3270VER+1  FORMAT VERSION NUMBER            00000206
  207.          MVI   M3270VER+2,C'.'                                          00000207
  208.          BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00000208
  209.          LINEDIT TEXT='DMSWMC011E This version of Mac3270 (.....) does X00000209
  210.                not support file transfer',                             X00000210
  211.                SUB=(CHARA,M3270VER),DISP=ERRMSG                         00000211
  212.          MVI   RTNCODE+3,36        STORE RETURN CODE & RETURN           00000212
  213.          B     CMSRTN                                                   00000213
  214.          SPACE                                                          00000214
  215. INITCONT TM    TRMFLAGS,GRAFTRM    3270 TERMINAL?                       00000215
  216.          BO    CPOK2               YES, SKIP ASCII INIT.                00000216
  217. *                                  DO ASCII INITIALIZATION              00000217
  218.          MVC   INTAB(4),AINTRTBL   SAVE "SET INPUT" TABLE               00000218
  219.          MVC   OUTTAB(4),AOUTRTBL  SAVE "SET OUTPUT" TABLE              00000219
  220.          DMSEXS XC,AINTRTBL(4),AINTRTBL  RESET INPUT TRANSLATION        00000220
  221.          DMSEXS XC,AOUTRTBL(4),AOUTRTBL  RESET OUTPUT TRANSLATION       00000221
  222.          LINEDIT TEXT='SET LINEDIT OFF',DOT=NO,DISP=CPCOMM              00000222
  223.          LTR   R15,R15             CHECK FOR ERROR FROM CP              00000223
  224.          BZ    CPOK1                                                    00000224
  225.          ST    R15,RTNCODE         SAVE RETURN CODE                     00000225
  226.          LINEDIT TEXT='DMSWMC010E Error from CP "SET" command',        X00000226
  227.                DISP=ERRMSG                                              00000227
  228.          B     CMSRTN                                                   00000228
  229.          SPACE                                                          00000229
  230. CPOK1    EQU   *                   SET PROMPT TO >, DC2                 00000230
  231.          CLC   NODEID(8),BROWNID   SKIP PROMPT COMMAND IF NOT BROWN     00000231
  232.          BNE   CPLSIZE                                                  00000232
  233.          LINEDIT TEXTA=PRMTCMD,DOT=NO,DISP=CPCOMM                       00000233
  234.          LTR   R15,R15             CHECK FOR ERROR FROM CP              00000234
  235.          BNZ   CPERR                                                    00000235
  236. CPLSIZE  LINEDIT TEXT='TERM LINESIZE OFF',DOT=NO,DISP=CPCOMM            00000236
  237.          LTR   R15,R15             CHECK FOR ERROR FROM CP              00000237
  238.          BZ    CPOK2                                                    00000238
  239. CPERR    ST    R15,RTNCODE         SAVE RETURN CODE                     00000239
  240.          LINEDIT TEXT='DMSWMC010E Error from CP "TERM" command',       X00000240
  241.                DISP=ERRMSG                                              00000241
  242.          B     CMSRTN                                                   00000242
  243.          SPACE                                                          00000243
  244. CPOK2    EQU   *                   HAVE MAC ENTER XFER MODE             00000244
  245.          LA    R1,CTLFS            R1 -> STRING                         00000245
  246.          LA    R2,2                R2 = LENGTH                          00000246
  247.          BAL   R14,WRITE           OUTPUT STRING                        00000247
  248.          EJECT                                                          00000248
  249. *                                                                       00000249
  250. * ATTEMPT TO GET VERSION INFORMATION.  END FILE TRANSFER IF             00000250
  251. * NOT A SUPPORTED SYSTEM.                                               00000251
  252. *                                                                       00000252
  253.          MVI   VERSDATA,C'M'       SET MACINTOSH DEFAULT                00000253
  254.          MVC   SENDDATA(2),=C'VR'  "VR" FOR VERSION REQUEST             00000254
  255.          LA    R1,2                COMMAND LENGTH IS 2                  00000255
  256.          STH   R1,SENDLEN                                               00000256
  257.          BAL   R14,CPMCMMD         EXECUTE COMMAND                      00000257
  258.          L     R1,=A(RECVDATA)     R1 -> RESULT                         00000258
  259.          CLC   0(2,R1),=C'VI'      DID WE GET VERSION INFO.?            00000259
  260.          BNE   CHKSYS              NO, KEEP DEFAULT                     00000260
  261.          MVC   VERSDATA(5),2(R1)   COPY VERSION DATA                    00000261
  262. CHKSYS   CLI   VERSDATA,C'M'       IS IT A MACINTOSH SYSTEM?            00000262
  263.          BE    SYSOK               YES, CAN CONTINUE                    00000263
  264.          CLI   VERSDATA,C'C'       IS IT A CP/M SYSTEM?                 00000264
  265.          BE    SYSOK               YES, CAN CONTINUE                    00000265
  266.          LA    R1,2                COMMAND LENGTH IS 2                  00000266
  267.          STH   R1,SENDLEN                                               00000267
  268.          MVC   SENDDATA(2),=C'EX'    "EXIT" COMMAND                     00000268
  269.          BAL   R14,CPMCMMD         EXECUTE COMMAND, IGNORE RESULTS      00000269
  270.          BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00000270
  271.          LINEDIT TEXT='DMSWMC010E Remote system type is unknown',      X00000271
  272.                DISP=ERRMSG                                              00000272
  273.          MVI   RTNCODE+3,36        STORE RETURN CODE & RETURN           00000273
  274.          B     CMSRTN                                                   00000274
  275.          SPACE                                                          00000275
  276. SYSOK    EQU   *                                                        00000276
  277.          CLC   VERSDATA+1(4),=C'0000'  IS XFSPEED SUPPORTED?            00000277
  278.          BE    VERTESTS            NO, KEEP FLAG OFF                    00000278
  279.          OI    FLAGS,XFS           SET FLAG FOR XFSPEED                 00000279
  280. VERTESTS EQU   *                   SPECIFIC VERSION TEST                00000280
  281.          CLI   VERSDATA,C'M'       MACINTOSH?                           00000281
  282.          BNE   VERSEND             NO, NOTHING SPECIAL                  00000282
  283.          TM    TRMFLAGS,MAC3270    APPLETALK CONNECTION?                00000283
  284.          BO    VERSATLK            YES, SEPARATE TESTS                  00000284
  285.          TM    FLAGS2,PRTXF        PRINTING REQUESTED?                  00000285
  286.          BZ    VTRMCONT            NO, CONTINUE                         00000286
  287.          CLC   VERSDATA+1(4),=C'0441'  IS TERM NEW ENOUGH?              00000287
  288.          BL    VERSERR             NO, RETURN ERROR                     00000288
  289. VTRMCONT CLC   VERSDATA+1(4),=C'0430'  IS TERM NEW ENOUGH?              00000289
  290.          BL    VERSEND             NO, KEEP FLAGS OFF                   00000290
  291.          OI    FLAGS2,ASCBIN+COMP  SET FLAGS FOR ASCBIN, COMPRESSION    00000291
  292.          B     VERSEND                                                  00000292
  293.          SPACE                                                          00000293
  294. VERSATLK EQU   *                   APPLETALK VERSION TEST               00000294
  295.          TM    FLAGS2,PRTXF        PRINTING REQUESTED?                  00000295
  296.          BZ    VATLCONT            NO, CONTINUE                         00000296
  297.          CLC   VERSDATA+1(4),=C'0225'  IS MAC3270 NEW ENOUGH?           00000297
  298.          BL    VERSERR                                                  00000298
  299. VATLCONT CLC   VERSDATA+1(4),=C'0140'  MAC3270 NEW ENOUGH?              00000299
  300.          BL    VERSEND             NO, KEEP FLAGS OFF                   00000300
  301.          OI    FLAGS2,COMP         SET COMPRESSION FLAG                 00000301
  302. VERSEND  EQU   *                   FINISH FILE INIT. /W VERSION INFO.   00000302
  303.          TM    FLAGS2,MACBIN       MACBINARY TRANSFER REQUESTED?        00000303
  304.          BZ    BINCHK              NO, CHECK JUST BINARY                00000304
  305.          TM    FLAGS2,COMP         COMPRESSION SUPPORTED?               00000305
  306.          BZ    VERSERR             NO, TOO OLD FOR MACBINARY            00000306
  307. BINCHK   TM    FLAGS2,BINXF        BINARY TRANSFER REQUESTED?           00000307
  308.          BZ    GETFSIZE            NO, CONTINUE WITH FILE SIZE          00000308
  309.          TM    TRMFLAGS,MAC3270    APPLETALK CONNECTION?                00000309
  310.          BO    GETFSIZE            YES, BINARY ALWAYS OK                00000310
  311.          TM    FLAGS2,ASCBIN       ASCBIN SUPPORT?                      00000311
  312.          BO    GETFSIZE            YES, BINARY IS OK                    00000312
  313. VERSERR  LA    R1,2                COMMAND LENGTH IS 2                  00000313
  314.          STH   R1,SENDLEN                                               00000314
  315.          MVC   SENDDATA(2),=C'EX'    "EXIT" COMMAND                     00000315
  316.          BAL   R14,CPMCMMD         EXECUTE COMMAND, IGNORE RESULTS      00000316
  317.          BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00000317
  318.          MVC   M3270VER(2),VERSDATA+1  FORMAT VERSION NUMBER            00000318
  319.          MVI   M3270VER+2,C'.'                                          00000319
  320.          MVC   M3270VER+3(2),VERSDATA+3                                 00000320
  321.          LINEDIT TEXT='DMSWMC012E This version (.....) of Mac3270 or TeX00000321
  322.                rm does not support the requested transfer type',       X00000322
  323.                SUB=(CHARA,M3270VER),DISP=ERRMSG                         00000323
  324.          MVI   RTNCODE+3,36        STORE RETURN CODE & RETURN           00000324
  325.          B     CMSRTN                                                   00000325
  326.          SPACE                                                          00000326
  327. GETFSIZE LA    R1,FSTCOPY          RESTORE R1 -> FST COPY               00000327
  328.          BAL   R14,SIZECALC        COMPUTE FILE SIZE                    00000328
  329.          TM    FLAGS2,MACBIN       MACBINARY TRANSFER?                  00000329
  330.          BZ    GETDATE             NO, CONTINUE WITH DATE               00000330
  331.          CLC   TOTSIZE(4),=F'128'  AT LEAST 128 BYTES?                  00000331
  332.          BNL   GETDATE             YES, CAN CONTINUE                    00000332
  333.          LA    R1,2                COMMAND LENGTH IS 2                  00000333
  334.          STH   R1,SENDLEN                                               00000334
  335.          MVC   SENDDATA(2),=C'EX'    "EXIT" COMMAND                     00000335
  336.          BAL   R14,CPMCMMD         EXECUTE COMMAND, IGNORE RESULTS      00000336
  337.          BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00000337
  338.          LINEDIT TEXT='DMSWMC014E File ''....................'' is not X00000338
  339.                in MacBinary format',                                   X00000339
  340.                SUB=(CHAR8A,FSCBFN),DISP=ERRMSG                          00000340
  341.          MVI   RTNCODE+3,32        STORE RETURN CODE & RETURN           00000341
  342.          B     CMSRTN                                                   00000342
  343.          SPACE                                                          00000343
  344. GETDATE  CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00000344
  345.          BNE   GETMDATE            NO, GET MAC DATE                     00000345
  346.          BAL   R14,CPMDATE         ELSE GET CP/M DATE                   00000346
  347.          B     HAVEDATE            AND CONTINUE                         00000347
  348.          SPACE                                                          00000348
  349. GETMDATE BAL   R14,MACDATE         COMPUTE MAC DATE & TIME              00000349
  350. HAVEDATE MVC   FSCBAITN(4),=F'0'   ITEM NO. = 0                         00000350
  351.          L     R1,INPBUF           FILL-IN BUFFER ADDRESS               00000351
  352.          ST    R1,FSCBBUFF                                              00000352
  353.          LA    R1,FSTCOPY          FILL-IN BUFFER LENGTH                00000353
  354.          USING FSTD,R1               GET LRECL FROM FST COPY            00000354
  355.          L     R1,FSTLRECL                                              00000355
  356.          DROP  R1                                                       00000356
  357.          ST    R1,FSCBSIZE           STORE AS BUFFER SIZE               00000357
  358.          MVC   FSCBANIT(4),=F'1'   NO. OF ITEMS TO READ = 1             00000358
  359. *                                  GENERATE CP/M FILE ID                00000359
  360.          MVC   MACID(8),FSCBFN     INITIALIZE MAC ID WITH               00000360
  361.          MVC   MACID+8(9),=CL9' '    FILENAME                           00000361
  362.          LA    R1,MACID            R1 -> FIRST BLANK IN ID              00000362
  363. IDLOOP   CLI   0(R1),C' '          LOOP UNTIL BLANK REACHED             00000363
  364.          BE    MOVEFT                                                   00000364
  365.          LA    R1,1(R1)                                                 00000365
  366.          B     IDLOOP                                                   00000366
  367.          SPACE                                                          00000367
  368. MOVEFT   CLI   VERSDATA,C'C'       CP/M?                                00000368
  369.          BE    CPMMFT              YES, DIFFERENT ID FORMAT             00000369
  370.          MVC   0(1,R1),DELIM       APPEND DELIMITER                     00000370
  371.          MVC   1(8,R1),FSCBFT        AND FILETYPE                       00000371
  372.          TM    FLAGS2,PRTXF        PRINTING FILE?                       00000372
  373.          BO    USEFT               YES, KEEP CASE AS IS                 00000373
  374.          L     R2,=A(TOLOWER)      TRANSLATE TO LOWER CASE              00000374
  375.          TR    MACID(17),0(R2)                                          00000375
  376.          B     USEFT                                                    00000376
  377.          SPACE                                                          00000377
  378. CPMMFT   MVI   0(R1),C'.'          APPEND PERIOD AND                    00000378
  379.          MVC   1(3,R1),FSCBFT        START OF FILETYPE                  00000379
  380. USEFT    EQU   *                                                        00000380
  381.          EJECT                                                          00000381
  382. *                                                                       00000382
  383. * OPEN MAC FILE FOR OUTPUT                                              00000383
  384. *                                                                       00000384
  385.          MVC   SENDDATA(2),=C'OO'  "OO" TO OPEN FOR OUTPUT              00000385
  386.          TM    FLAGS2,ASCXF        ASCII XFER FORCED?                   00000386
  387.          BO    KEEPOO              YES, KEEP "OO" COMMAND               00000387
  388.          TM    FLAGS2,COMP         COMPRESSION SUPPORTED?               00000388
  389.          BZ    KEEPOO              NO, KEEP "OO" COMMAND                00000389
  390. * SUPPORT FOR COMPRESSION, 'AO', AND 'MO'  WERE ADDED TOGETHER          00000390
  391. * 'AO' ALLOWS THE MICRO TO CHOOSE THE TRANSFER TYPE;                    00000391
  392. * 'MO' REQUESTS A TRANSFER IN MACBINARY FORMAT                          00000392
  393.          MVC   SENDDATA(2),=C'AO'  "AO" FOR ALTERNATE OUTPUT            00000393
  394. KEEPOO   TM    FLAGS2,BINXF        BINARY SPECIFIED?                    00000394
  395.          BZ    KEEPOPN             NO, KEEP CURRENT COMMAND             00000395
  396.          MVC   SENDDATA(2),=C'BO'  "BO" FOR BINARY OUTPUT               00000396
  397.          NI    FLAGS2,255-BINXF    RESET FLAG                           00000397
  398.          TM    FLAGS2,MACBIN       MACBINARY SPECIFIED?                 00000398
  399.          BZ    KEEPOPN             NO, KEEP PLAIN BINARY                00000399
  400.          MVC   SENDDATA(2),=C'MO'  "MO" FOR MACBINARY OUTPUT            00000400
  401.          NI    FLAGS2,255-MACBIN   RESET FLAG                           00000401
  402. KEEPOPN  MVC   SENDDATA+2(4),SIZECHAR  FOLLOWED BY SECTOR COUNT         00000402
  403.          CLI   VERSDATA,C'C'       DIFFERENT LENGTHS FOR CP/M           00000403
  404.          BE    OPENCPM                                                  00000404
  405.          MVC   SENDDATA+6(14),DATECHAR FOLLOWED BY DATE AND TIME        00000405
  406.          MVC   SENDDATA+20(17),MACID   FOLLOWED BY MAC FILE ID          00000406
  407.          LA    R1,37               R1 = MAXIMUM LENGTH                  00000407
  408.          LA    R2,SENDDATA+36      R2 -> LAST BYTE                      00000408
  409.          B     TRUNLP                                                   00000409
  410.          SPACE                                                          00000410
  411. OPENCPM  MVC   SENDDATA+6(8),DATECHAR  FOLLOWED BY DATE AND TIME        00000411
  412.          MVC   SENDDATA+14(12),MACID   FOLLOWED BY CP/M FILE ID         00000412
  413.          LA    R1,26               R1 = MAXIMUM LENGTH                  00000413
  414.          LA    R2,SENDDATA+25      R2 -> LAST BYTE                      00000414
  415. TRUNLP   CLI   0(R2),C' '          LOOP: ADJUST LENGTH TO REMOVE        00000415
  416.          BNE   USELEN                TRAILING BLANKS                    00000416
  417.          BCTR  R1,0                     DECREMENT LENGTH                00000417
  418.          BCTR  R2,0                     DECREMENT ADDRESS               00000418
  419.          B     TRUNLP                                                   00000419
  420.          SPACE                                                          00000420
  421. USELEN   STH   R1,SENDLEN          STORE COMPUTED LENGTH                00000421
  422.          TM    FLAGS2,PRTXF        PRINTING SPECIFIED?                  00000422
  423.          BO    USEPRT              YES, MENU IS IRRELEVANT              00000423
  424.          TM    FLAGS,NOMENU        MENU SUPPRESSED?                     00000424
  425.          BZ    EXOPEN              NO, CONTINUE                         00000425
  426.          CLI   VERSDATA,C'C'       LIKEWISE IF CP/M                     00000426
  427.          BE    EXOPEN                                                   00000427
  428.          LA    R2,SENDDATA(R1)     APPEND "*" AT END                    00000428
  429.          MVI   0(R2),C'*'                                               00000429
  430.          LA    R1,1(R1)            INCREMENT LENGTH                     00000430
  431.          STH   R1,SENDLEN          STORE UPDATED VALUE                  00000431
  432.          B     EXOPEN                                                   00000432
  433.          SPACE                                                          00000433
  434. USEPRT   CLI   VERSDATA,C'C'       IGNORE PRINTING IF CP/M              00000434
  435.          BE    EXOPEN                                                   00000435
  436.          LA    R2,SENDDATA(R1)     APPEND "." AT END                    00000436
  437.          MVI   0(R2),C'.'                                               00000437
  438.          LA    R1,1(R1)            INCREMENT LENGTH                     00000438
  439.          STH   R1,SENDLEN          STORE UPDATED VALUE                  00000439
  440.          SPACE                                                          00000440
  441. EXOPEN   EQU   *                                                        00000441
  442.          BAL   R14,CPMCMMD         EXECUTE COMMAND                      00000442
  443.          L     R1,=A(RECVDATA)     R1 -> RESULT                         00000443
  444.          CLC   0(2,R1),=C'BT'      BINARY TRANSFER WANTED?              00000444
  445.          BE    BINOPEN             YES, SET FLAG                        00000445
  446.          CLC   0(2,R1),=C'MT'      MACBINARY TRANSFER WANTED?           00000446
  447.          BNE   OPENRC              NO, CHECK RC                         00000447
  448.          OI    FLAGS2,MACBIN       SET MACBINARY FLAG                   00000448
  449. BINOPEN  OI    FLAGS2,BINXF        SET BINARY FLAG                      00000449
  450.          B     WRBGN               CONTINUE NORMALLY                    00000450
  451.          SPACE                                                          00000451
  452. OPENRC   BAL   R14,READRC          GET RETURN CODE IN R1                00000452
  453.          LTR   R1,R1               IF ZERO, READY FOR DATA              00000453
  454.          BZ    WRBGN                                                    00000454
  455. OPENERR  EQU   *                   ELSE END XFER MODE                   00000455
  456.          LR    R2,R1               COPY RC FOR LINEDIT                  00000456
  457.          LA    R1,2                COMMAND LENGTH IS 2                  00000457
  458.          STH   R1,SENDLEN                                               00000458
  459.          MVC   SENDDATA(2),=C'EX'  "EXIT" COMMAND                       00000459
  460.          BAL   R14,CPMCMMD         EXECUTE COMMAND, IGNORE RESULTS      00000460
  461.          BAL   R14,ENDFS           END FULL-SCREEN MODE                 00000461
  462.          C     R2,=F'1'            ERROR 1 IS CP/M FILE EXISTS          00000462
  463.          BE    NOFILE                                                   00000463
  464.          C     R2,=F'5'            ERROR 5 IS XFER CANCELLED BY USER    00000464
  465.          BE    USERQUIT                                                 00000465
  466. *                                  ELSE TYPE ERROR NUMBER               00000466
  467.    LINEDIT TEXT='DMSWMC004E Mac error .... opening ''.................'X00000467
  468.                '',SUB=(DEC,(R2),CHARA,MACID),DISP=ERRMSG,RENT=NO        00000468
  469.          LA    R15,100(R2)         STORE RETURN CODE & RETURN           00000469
  470.          ST    R15,RTNCODE                                              00000470
  471.          B     CMSRTN                                                   00000471
  472.          SPACE                                                          00000472
  473. NOFILE   EQU   *                                                        00000473
  474.          LINEDIT TEXT='DMSWMC005E Mac file ''.................'' alreadX00000474
  475.                y exists',SUB=(CHARA,MACID),DISP=ERRMSG                  00000475
  476.          LA    R15,100(R2)                                              00000476
  477.          ST    R15,RTNCODE                                              00000477
  478.          B     CMSRTN                                                   00000478
  479.          SPACE                                                          00000479
  480. USERQUIT EQU   *                                                        00000480
  481.          LINEDIT TEXT='DMSWMC013E File transfer cancelled by user',    X00000481
  482.                DISP=ERRMSG                                              00000482
  483.          MVI   RTNCODE+3,24                                             00000483
  484.          B     CMSRTN                                                   00000484
  485.          EJECT                                                          00000485
  486. *                                                                       00000486
  487. * READ AND PROCESS EACH LINE OF CMS FILE                                00000487
  488. *                                                                       00000488
  489. WRBGN    OI    FLAGS,FINIS         SET FLAG TO CALL FINIS               00000489
  490.          SR    R4,R4               INIT. CP/M BLOCK NO. OFFSET          00000490
  491.          ST    R4,BLOCKNO                                               00000491
  492.          OI    FLAGS,BLNKLINE      LAST LINE BLANK                      00000492
  493.          TM    FLAGS2,MACBIN       MACBINARY TRANSFER?                  00000493
  494.          BZ    RDLOOP              NO, READY FOR DATA                   00000494
  495. * READ FIRST 128 BYTES AND SEND "MH" (MACBINARY HEADER) COMMAND         00000495
  496.          MVC   SENDDATA(2),=C'MH'  STORE COMMAND                        00000496
  497.          LA    R1,130              STORE COMMAND LENGTH                 00000497
  498.          STH   R1,SENDLEN                                               00000498
  499.          LA    R2,SENDDATA+2       R2 = OUTPUT POINTER                  00000499
  500.          LA    R3,128              R3 = NO. OF BYTES NEEDED             00000500
  501.          L     R4,INPBUF           R4 -> INPUT BUFFER                   00000501
  502. MHREADLP EQU   *                   LOOP TO READ HEADER INFO.            00000502
  503.          FSREAD FSCB=INFILE,FORM=E      READ NEXT LINE                  00000503
  504.          LTR   R15,R15                  CHECK FOR ERRORS                00000504
  505.          BNZ   RDRC                                                     00000505
  506.          SR    R5,R5                    ASSUME ALL BYTES USED           00000506
  507.          L     R6,FSCBNORD              R6 = NO. OF BYTES READ          00000507
  508.          CR    R6,R3                    MORE THAN WE NEED?              00000508
  509.          BNH   MHKEEPRD                 NO, KEEP LENGTH                 00000509
  510.          LR    R5,R6                    R5 = NO. OF UNUSED BYTES        00000510
  511.          SR    R5,R3                                                    00000511
  512.          LR    R6,R3                    USE HOW MANY WE NEED            00000512
  513. MHKEEPRD BCTR  R6,0                     DECREMENT FOR EX                00000513
  514.          EX    R6,MHMVC                 MOVE DATA TO BUFFER             00000514
  515.          LA    R6,1(R6)                 RESTORE LENGTH MOVED            00000515
  516.          LA    R2,0(R2,R6)              UPDATE OUTPUT POINTER           00000516
  517.          SR    R3,R6                    UPDATE BYTES NEEDED             00000517
  518.          BNZ   MHREADLP                 REPEAT IF MORE NEEDED           00000518
  519.          BAL   R14,CPMCMMD         ISSUE MH COMMAND                     00000519
  520.          BAL   R14,READRC          GET RETURN CODE IN R1                00000520
  521.          LTR   R1,R1               IF NON-ZERO, HANDLE AS OPEN ERROR    00000521
  522.          BNZ   OPENERR                                                  00000522
  523.          LTR   R5,R5               ANY UNUSED BYTES?                    00000523
  524.          BZ    RDLOOP              NO, CONTINUE NORMALLY                00000524
  525.          OI    FLAGS,RDREC         INDICATE DATA READ                   00000525
  526.          LR    R0,R4               R0 -> DESTINATION                    00000526
  527.          LA    R2,0(R4,R6)         R2 -> SOURCE                         00000527
  528.          LR    R1,R5               R1, R3 = COUNT                       00000528
  529.          LR    R3,R5                                                    00000529
  530.          MVCL  R0,R2               MOVE EXTRA DATA TO BUFFER START      00000530
  531.          LR    R1,R5               R1 = BYTE COUNT                      00000531
  532.          B     RDLPROC             ENTER READ LOOP                      00000532
  533.          SPACE                                                          00000533
  534. MHMVC    MVC   0(*-*,R2),0(R4)     MOVE FILE DATA TO COMMAND            00000534
  535.          SPACE                                                          00000535
  536. RDLOOP   EQU   *                   LOOP TO READ INPUT LINES:            00000536
  537.          FSREAD  FSCB=INFILE,FORM=E     CALL FSREAD                     00000537
  538.          LTR   R15,R15                  EXIT IF READ NOT SUCCESSFUL     00000538
  539.          BNZ   RDEND                                                    00000539
  540.          OI    FLAGS,RDREC              INDICATE DATA READ              00000540
  541.          L     R1,FSCBNORD              R1 = NO. OF BYTES READ          00000541
  542. RDLPROC  BAL   R14,PROCLINE             CALL PROCLINE                   00000542
  543.          B     RDLOOP                   TRY TO READ ANOTHER LINE        00000543
  544.          SPACE                                                          00000544
  545. RDEND    C     R15,=F'12'          TYPE MESSAGE IF NOT EOF              00000545
  546.          BE    RDCHK                                                    00000546
  547. RDRC     LR    R3,R15              COPY ERROR CODE FOR LINEDIT          00000547
  548.          LA    R1,SUBCODE          R1 -> STRING                         00000548
  549.          LA    R2,1                R2 = LENGTH                          00000549
  550.          BAL   R14,WRITE           TELL VMXFER TO CALL "SUBSET"         00000550
  551.          BAL   R14,ENDFS                                                00000551
  552.          LINEDIT TEXT='DMSWMC104S Error ''.....'' reading file ''......X00000552
  553.                ..............'' from disk',                            X00000553
  554.                SUB=(DEC,(R3),CHAR8A,FSCBFN),DISP=ERRMSG,RENT=NO         00000554
  555.          BAL   R14,BEGINFS                                              00000555
  556.          LA    R1,SUBCODE          R1 -> STRING                         00000556
  557.          LA    R2,1                R2 = LENGTH                          00000557
  558.          BAL   R14,WRITE           TELL VMXFER TO EXIT "SUBSET"         00000558
  559.          LA    R15,100             STORE RETURN CODE                    00000559
  560.          ST    R15,RTNCODE                                              00000560
  561. RDCHK    TM    FLAGS,RDREC         SKIP TO CLOSE IF A RECORD WAS        00000561
  562.          BZ    WRCLOSE               NEVER READ                         00000562
  563.          TM    FLAGS2,BINXF        BINARY TRANSFER?                     00000563
  564.          BZ    WREOF               NO, ADD CP/M EOF CHARACTER           00000564
  565.          L     R2,BUFSIZE          ANY CHARACTERS LEFT IN BUFFER?       00000565
  566.          LTR   R2,R2               NO, READY FOR CLOSE                  00000566
  567.          BZ    WRCLOSE                                                  00000567
  568.          BAL   R14,WRCMMD          ELSE WRITE REMAINING DATA            00000568
  569.          B     WRCLOSE             SEND CLOSE COMMAND                   00000569
  570.          SPACE                                                          00000570
  571. WREOF    L     R2,BUFSIZE          R2 = BYTES IN BUFFER                 00000571
  572.          C     R2,PCKSIZE          IF FULL, WRITE BUFFER                00000572
  573.          BL    WRAPP                                                    00000573
  574.          BAL   R14,WRCMMD          WRITE BUFFER TO CP/M                 00000574
  575.          SR    R2,R2               RESET BYTE COUNT                     00000575
  576.          ST    R2,BUFSIZE                                               00000576
  577. WRAPP    EQU   *                   ADD CTL-Z TO END OF BUFFER           00000577
  578.          LA    R1,SENDDATA+6       R1 -> NEXT AVAILABLE BYTE            00000578
  579.          TM    FLAGS,XFS           INCLUDING XFSPEED?                   00000579
  580.          BZ    KEEPNXT1            NO, KEEP AS IS                       00000580
  581.          LA    R1,SENDDATA+10      ELSE ADJUST FOR SPEED BYTES          00000581
  582. KEEPNXT1 A     R1,BUFSIZE                                               00000582
  583.          MVI   0(R1),X'3F'         STORE CP/M EOF CODE                  00000583
  584.          L     R2,BUFSIZE          UPDATE BUFFER SIZE                   00000584
  585.          LA    R2,1(R2)                                                 00000585
  586.          ST    R2,BUFSIZE                                               00000586
  587.          BAL   R14,WRCMMD          WRITE BUFFER TO CP/M                 00000587
  588. WRCLOSE  EQU   *                   CLOSE CP/M FILE                      00000588
  589.          LA    R1,2                COMMAND LENGTH IS 2                  00000589
  590.          STH   R1,SENDLEN                                               00000590
  591.          MVC   SENDDATA(2),=C'CO'  CLOSE OUTPUT FILE                    00000591
  592.          BAL   R14,CPMCMMD         EXECUTE COMMAND                      00000592
  593.          BAL   R14,READRC          GET RETURN CODE IN R1                00000593
  594.          LTR   R1,R1               TYPE MESSAGE IF NOT ZERO             00000594
  595.          BZ    WREXIT                                                   00000595
  596.          LR    R3,R1               COPY RETURN CODE FOR LINEDIT         00000596
  597.          LA    R1,SUBCODE          R1 -> STRING                         00000597
  598.          LA    R2,1                R2 = LENGTH                          00000598
  599.          BAL   R14,WRITE           TELL VMXFER TO CALL "SUBSET"         00000599
  600.          BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00000600
  601.          LINEDIT TEXT='DMSWMC009E Error ...... from Mac close',        X00000601
  602.                SUB=(DEC,(R3)),DISP=ERRMSG                               00000602
  603.          LA    R15,100(R3)         STORE RETURN CODE                    00000603
  604.          ST    R15,RTNCODE                                              00000604
  605.          BAL   R14,BEGINFS         RESTORE FULL-SCREEN MODE             00000605
  606.          LA    R1,SUBCODE          R1 -> STRING                         00000606
  607.          LA    R2,1                R2 = LENGTH                          00000607
  608.          BAL   R14,WRITE           TELL VMXFER TO EXIT "SUBSET"         00000608
  609. WREXIT   LA    R1,2                COMMAND LENGTH IS 2                  00000609
  610.          STH   R1,SENDLEN                                               00000610
  611.          MVC   SENDDATA(2),=C'EX'  "EXIT" COMMAND                       00000611
  612.          BAL   R14,CPMCMMD         EXECUTE COMMAND, IGNORE RESULTS      00000612
  613. *        B     CMSRTN              RETURN TO CMS                        00000613
  614.          SPACE                                                          00000614
  615. *                                                                       00000615
  616. * RETURN TO CMS                                                         00000616
  617. *                                                                       00000617
  618. CMSRTN   TM    FLAGS2,TERMINIT     TERMINAL TYPE KNOWN?                 00000618
  619.          BZ    RTNCLOSE            NO, SKIP CLEANUP                     00000619
  620.          TM    TRMFLAGS,GRAFTRM    3270 TERMINAL?                       00000620
  621.          BO    RTN3270             YES, END FULL-SCREEN MODE            00000621
  622. *                                  CLEANUP FOR ASCII:                   00000622
  623.          LINEDIT TEXT='SET LINEDIT ON',DOT=NO,DISP=CPCOMM               00000623
  624.          LINEDIT TEXT='TERM LINESIZE 80',DOT=NO,DISP=CPCOMM             00000624
  625.          CLC   NODEID(8),BROWNID   SKIP PROMPT COMMAND IF NOT BROWN     00000625
  626.          BNE   PRSKIP1                                                  00000626
  627.          LINEDIT TEXT='TERM PROMPT ON',DOT=NO,DISP=CPCOMM               00000627
  628. PRSKIP1  EQU    *                                                       00000628
  629.          DMSEXS MVC,AINTRTBL(4),INTAB  RESTORE XLATE TABLES             00000629
  630.          DMSEXS MVC,AOUTRTBL(4),OUTTAB                                  00000630
  631.          B     RTNCLOSE                                                 00000631
  632.          SPACE                                                          00000632
  633. RTN3270  BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00000633
  634. RTNCLOSE TM    FLAGS,FINIS                                              00000634
  635.          BZ    NOTOPEN                                                  00000635
  636.          FSCLOSE '* * *'           FORCE FILE TO BE CLOSED              00000636
  637. NOTOPEN  L     R2,RETRYCNT         TYPE NON-ZERO RETRY COUNT            00000637
  638.          LTR   R2,R2                                                    00000638
  639.          BZ    NORETRY                                                  00000639
  640.          LINEDIT TEXT='DMSWMC008I ...... block retransmission(s)',     X00000640
  641.                SUB=(DEC,(R2)),DISP=ERRMSG                               00000641
  642. NORETRY  TM    FLAGS2,IOBUFF       INPBUF ALLOCATED?                    00000642
  643.          BZ    NOFRET              NO, SKIP FRET CALL                   00000643
  644.          LM    R0,R1,INPBUFDW      GET R0, R1 FROM DMSFREE              00000644
  645.          DMSFRET DWORDS=(0),LOC=(1)  RETURN STORAGE                     00000645
  646. NOFRET   LM    R0,R15,REGSAVE      RESTORE REGISTERS AND RETURN         00000646
  647.          BR    R14                                                      00000647
  648.          EJECT                                                          00000648
  649. *                                                                       00000649
  650. * PROCESS ONE LINE FROM CMS FILE                                        00000650
  651. *                                                                       00000651
  652. PROCLINE STM   R0,R15,PRSAVE       SAVE REGISTERS                       00000652
  653.          DROP  R9                  WE USE R9                            00000653
  654. *                                  R1 = NO. OF BYTES READ               00000654
  655.          L     R6,INPBUF           R6 -> INPUT BUFFER                   00000655
  656.          LR    R5,R1               COPY LENGTH TO R5                    00000656
  657.          TM    FLAGS2,BINXF        BINARY TRANSFER?                     00000657
  658.          BZ    PROCTXT             NO, CONTINUE WITH TEXT PROC.         00000658
  659.          B     TXTLENOK            READY TO USE LINE                    00000659
  660.          SPACE                                                          00000660
  661. PROCTXT  LTR   R5,R5               NULL LINE?  (SHOULDN'T HAPPEN)       00000661
  662.          BP    LGOK                NO, CONTINUE                         00000662
  663.          MVI   0(R6),C' '          MOVE BLANK TO BUFFER                 00000663
  664.          LA    R5,1                  AND MAKE LENGTH 1                  00000664
  665. LGOK     EQU   *                   TRANSLATE INVALID CHARACTERS TO "║"  00000665
  666.          L     R0,=A(TRTABSTD)     R5 -> STANDARD TRANSLATE TABLE       00000666
  667.          TM    FLAGS3,ALTTR        USE DIFFERENT TR FOR BROWN           00000667
  668.          BZ    EXTR                                                     00000668
  669.          L     R0,=A(TRTABBRN)                                          00000669
  670. EXTR     LR    R2,R5               R2 = LENGTH                          00000670
  671.          LR    R1,R6               R1 -> STRING                         00000671
  672.          BAL   R14,LONGTR          TRANSLATE STRING                     00000672
  673.          TM    FLAGS,TEXT          SPECIAL "TEXT" PROCESSING?           00000673
  674.          BZ    NOTTEXT             NO, CONTINUE NORMALLY                00000674
  675. *                                  ADJUST LENGTH TO DELETE TRAILING     00000675
  676. *                                    BLANKS                             00000676
  677. TXTLOOP  EQU   *                   LOOP TO FIND LAST NON-BLANK          00000677
  678.          LA    R2,0(R5,R6)           POINT TO NEXT BYTE FROM RIGHT      00000678
  679.          BCTR  R2,0                                                     00000679
  680.          CLI   0(R2),C' '            USE LENGTH IN R5 IF NON-BLANK      00000680
  681.          BNE   TXTADD                                                   00000681
  682.          BCT   R5,TXTLOOP            REPEAT                             00000682
  683.          MVI   0(R6),X'0E'         CONVERT BLANK LINE TO CR             00000683
  684.          LA    R5,1                LENGTH FOR CR IS 1                   00000684
  685.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00000685
  686.          BNE   KEEPCR              NO, CONTINUE                         00000686
  687.          MVI   1(R6),X'0B'         CONVERT BLANK LINE TO CR, LF         00000687
  688.          LA    R5,2                LENGTH FOR CR, LF IS 2               00000688
  689. KEEPCR   TM    FLAGS,TRUNCATE      TRUNCATE OPTION?                     00000689
  690.          BO    TXTBLOK             YES, SKIP BLNKLINE TEST              00000690
  691.          TM    FLAGS,BLNKLINE      WAS LAST LINE BLANK?                 00000691
  692.          BO    TXTBLOK             IF SO, KEEP 1 CR                     00000692
  693.          MVI   1(R6),X'0E'         ELSE ADD ANOTHER CR                  00000693
  694.          LA    R5,2                                                     00000694
  695.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00000695
  696.          BNE   TXTBLOK             NO, CONTINUE                         00000696
  697.          MVI   1(R6),X'0B'         RESTORE PREVIOUS LF                  00000697
  698.          MVC   2(2,R6),=X'0E0B'    ADD ANOTHER CR, LF                   00000698
  699.          LA    R5,4                                                     00000699
  700. TXTBLOK  OI    FLAGS,BLNKLINE      REMEMBER HAD BLANK LINE              00000700
  701.          B     TXTLENOK            DONE WITH LINE                       00000701
  702.          SPACE                                                          00000702
  703. TXTADD   NI    FLAGS,255-BLNKLINE  REMEMBER LINE NOT BLANK              00000703
  704.          MVI   1(R2),C' '          APPEND BLANK AT END                  00000704
  705.          LA    R5,1(R5)            SET NEW LENGTH                       00000705
  706.          TM    FLAGS,TRUNCATE      TRUNCATE OPTION?                     00000706
  707.          BZ    TXTLENOK            NO, ALL SET                          00000707
  708.          MVI   1(R2),X'0E'         APPEND LF AT END INSTEAD             00000708
  709.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00000709
  710.          BNE   TXTLENOK            NO, THEN ALL SET                     00000710
  711.          MVI   2(R2),X'0B'         ELSE NEED LF AFTER CR                00000711
  712.          LA    R5,1(R5)                                                 00000712
  713.          B     TXTLENOK                                                 00000713
  714.          SPACE                                                          00000714
  715. NOTTEXT  LA    R2,0(R5,R6)         ADD SO (XLATED CR) AT END OF LINE    00000715
  716.          MVI   0(R2),X'0E'                                              00000716
  717.          LA    R5,1(R5)                                                 00000717
  718.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00000718
  719.          BNE   TXTLENOK            NO, CONTINUE                         00000719
  720.          MVI   1(R2),X'0B'         ALSO ADD LINEFEED                    00000720
  721.          LA    R5,1(R5)                                                 00000721
  722. TXTLENOK EQU   *                   R5 = LENGTH, R6 -> INPUT BUFFER      00000722
  723. REPEAT   LTR   R5,R5               ALL DONE IF LENGTH = 0               00000723
  724.          BNP   PRRTN                                                    00000724
  725.          L     R7,BUFSIZE          BUFFER FULL?                         00000725
  726.          C     R7,PCKSIZE                                               00000726
  727.          BL    MOVDATA             NO- WRITING BUFFER                   00000727
  728.          BAL   R14,WRCMMD          WRITE BUFFER TO CP/M                 00000728
  729.          SR    R7,R7               RESET BYTE COUNT                     00000729
  730.          ST    R7,BUFSIZE                                               00000730
  731. MOVDATA  LR    R8,R5               R8 = NO. OF BYTES TO MOVE            00000731
  732.          C     R8,=F'256'          CANNOT EXCEED 256                    00000732
  733.          BNH   MOVCONT               (MVC RESTRICTION)                  00000733
  734.          L     R8,=F'256'                                               00000734
  735. MOVCONT  S     R7,PCKSIZE          R7 = BYTES LEFT IN BUFFER            00000735
  736.          LCR   R7,R7                                                    00000736
  737.          CR    R7,R8               ADJUST BYTE COUNT IF BUFFER          00000737
  738.          BNL   EXMOV                 WOULD OVERFLOW                     00000738
  739.          LR    R8,R7                                                    00000739
  740. EXMOV    BCTR  R8,0                DECREMENT FOR MVC                    00000740
  741.          STC   R8,MVC1+1           STORE LENGTH IN MVC                  00000741
  742.          LA    R9,SENDDATA+6       R9 -> NEXT AVAILABLE BYTE            00000742
  743.          TM    FLAGS,XFS           INCLUDING XFSPEED?                   00000743
  744.          BZ    KEEPNXT2            NO, KEEP AS IS                       00000744
  745.          LA    R9,SENDDATA+10                                           00000745
  746. KEEPNXT2 EQU   *                                                        00000746
  747.          A     R9,BUFSIZE            IN BUFFER                          00000747
  748. MVC1     MVC   0(*-*,R9),0(R6)     APPEND TO BUFFER                     00000748
  749.          LA    R8,1(R8)            R8 = NO. OF BYTES MOVED              00000749
  750.          AR    R6,R8               INCREMENT STRING ADDRESS             00000750
  751.          SR    R5,R8               DECREMENT STRING LENGTH              00000751
  752.          L     R7,BUFSIZE          UPDATE BUFFER LENGTH                 00000752
  753.          AR    R7,R8                                                    00000753
  754.          ST    R7,BUFSIZE                                               00000754
  755.          B     REPEAT              CONTINUE UNTIL ALL BYTES TRANSFERRED 00000755
  756.          SPACE                                                          00000756
  757. PRRTN    LM    R0,R15,PRSAVE       RESTORE REGISTERS                    00000757
  758.          BR    R14                 RETURN TO CALLER                     00000758
  759.          SPACE                                                          00000759
  760. PRSAVE   DS    8D                  LOCAL SAVE AREA                      00000760
  761.          USING FSCBD,R9            R9 OK FOR REST OF CODE               00000761
  762.          EJECT                                                          00000762
  763. * WRITE CMS FILE DATA TO CMS                                            00000763
  764.          SPACE                                                          00000764
  765. WRCMMD   EQU   *                                                        00000765
  766.          LR    R13,R14             COPY RETURN ADDRESS                  00000766
  767.          MVC   SENDDATA(6),=X'402120202020'  CONVERT BLOCK NUMBER       00000767
  768.          L     R4,BLOCKNO                                               00000768
  769.          CVD   R4,DECBUF                                                00000769
  770.          ED    SENDDATA(6),DECBUF+5                                     00000770
  771.          MVC   SENDDATA(2),=C'WB'  STORE WRITE BLOCK COMMAND            00000771
  772.          LA    R4,1(R4)            INCREMENT BLOCK NUMBER               00000772
  773.          ST    R4,BLOCKNO                                               00000773
  774.          LA    R1,6                GET TOTAL LENGTH                     00000774
  775.          TM    FLAGS,XFS           IS XFSPEED SUPPORTED?                00000775
  776.          BZ    NOSPEED             NO, KEEP JUST BLOCK NO.              00000776
  777.          MVC   SENDDATA+6(4),XFSPEED  APPEND XFSPEED                    00000777
  778.          LA    R1,10               CHANGE LENGTH TO 10                  00000778
  779. NOSPEED  EQU   *                                                        00000779
  780.          A     R1,BUFSIZE                                               00000780
  781.          STH   R1,SENDLEN          STORE COMMAND LENGTH                 00000781
  782.          BAL   R14,CPMCMMD         EXECUTE COMMAND                      00000782
  783.          BAL   R14,READRC          GET RETURN CODE IN R1                00000783
  784.          LTR   R1,R1               IF NON-ZERO, HANDLE ERROR            00000784
  785.          BNZ   WCMDERR                                                  00000785
  786.          CLC   BLOCKNO(4),=F'1'    DID WE JUST SEND FIRST BLOCK?        00000786
  787.          BNER  R13                 NO, READY TO RETURN                  00000787
  788.          TM    FLAGS,XFS           XFSPEED SUPPORTED?                   00000788
  789.          BZR   R13                 NO, JUST RETURN                      00000789
  790.          MVC   SENDDATA(2),=C'TT'  STORE TRANSFER TIME COMMAND          00000790
  791.          MVC   SENDDATA+2(4),XFSPEED  APPEND XFSPEED                    00000791
  792.          LA    R1,6                STORE COMMAND LENGTH                 00000792
  793.          STH   R1,SENDLEN                                               00000793
  794.          BAL   R14,CPMCMMD         EXECUTE COMMAND                      00000794
  795.          BAL   R14,READRC          GET RETURN CODE AND IGNORE           00000795
  796.          BR    R13                 RETURN TO CALLER                     00000796
  797.          SPACE                                                          00000797
  798. WCMDERR  LR    R3,R1               COPY RETURN CODE FOR LINEDIT         00000798
  799.          LA    R1,SUBCODE          R1 -> STRING                         00000799
  800.          LA    R2,1                R2 = LENGTH                          00000800
  801.          BAL   R14,WRITE           TELL VMXFER TO CALL "SUBSET"         00000801
  802.          BAL   R14,ENDFS           END FULL-SCREEN MODE                 00000802
  803.          C     R3,=F'11'           CHECK FOR USER ABORT                 00000803
  804.          BE    USRABORT                                                 00000804
  805.          LINEDIT TEXT='DMSWMC006E Error ...... from Mac write',        X00000805
  806.                SUB=(DEC,(R3)),DISP=ERRMSG                               00000806
  807.          LA    R15,100(R3)         STORE RETURN CODE                    00000807
  808.          ST    R15,RTNCODE                                              00000808
  809.          BAL   R14,BEGINFS         RESTORE FULL-SCREEN MODE             00000809
  810.          LA    R1,SUBCODE          R1 -> STRING                         00000810
  811.          LA    R2,1                R2 = LENGTH                          00000811
  812.          BAL   R14,WRITE           TELL VMXFER TO EXIT "SUBSET"         00000812
  813.          B     WRCLOSE             CLOSE CP/M FILE AND RETURN TO CMS    00000813
  814.          SPACE                                                          00000814
  815. USRABORT LINEDIT TEXT='DMSWMC011E Transfer aborted by user',           X00000815
  816.                DISP=ERRMSG                                              00000816
  817.          LA    R15,100(R3)         STORE RETURN CODE                    00000817
  818.          ST    R15,RTNCODE                                              00000818
  819.          BAL   R14,BEGINFS         RESTORE FULL-SCREEN MODE             00000819
  820.          LA    R1,SUBCODE          R1 -> STRING                         00000820
  821.          LA    R2,1                R2 = LENGTH                          00000821
  822.          BAL   R14,WRITE           TELL VMXFER TO EXIT "SUBSET"         00000822
  823.          B     WRCLOSE             CLOSE CP/M FILE AND RETURN TO CMS    00000823
  824.          EJECT                                                          00000824
  825. *                                  SEND COMMAND TO CP/M SYSTEM AND      00000825
  826. *                                    READ RESPONSE                      00000826
  827. CPMCMMD  EQU   *                                                        00000827
  828.          STM   R0,R15,CMMDSAVE     SAVE REGISTERS                       00000828
  829.          SR    R4,R4               RETRY COUNT = 0                      00000829
  830.          LH    R0,SENDLEN          CALCULATE CHECKSUM (4 BYTES)         00000830
  831.          LA    R1,SENDDATA                                              00000831
  832.          BAL   R14,CHKCALC         RESULT BYTES ARE IN R2               00000832
  833. *                                  APPEND CHECKSUM TO SENDDATA          00000833
  834.          AR    R1,R0               R1 -> AFTER LAST BYTE OF DATA        00000834
  835.          MVI   0(R1),X'01'         STORE CHECKSUM DELIMITER             00000835
  836.          LA    R1,1(R1)            STORE CHECKSUM BYTES                 00000836
  837.          STCM  R2,B'1111',0(R1)                                         00000837
  838.          LH    R2,SENDLEN          ADD 5 TO LENGTH                      00000838
  839.          LA    R2,5(R2)              (DELIMITER, 4-BYTE CHECKSUM)       00000839
  840.          STH   R2,SENDLEN                                               00000840
  841.          ST    R2,ORIGSIZE         SAVE ORIGINAL SIZE                   00000841
  842.          TM    TRMFLAGS,MAC3270    APPLETALK CONNECTION                 00000842
  843.          BO    CMDCTEST            YES, KEEP SIZE                       00000843
  844.          LA    R2,2(R2)            INCLUDE START BYTES IN COUNT         00000844
  845.          ST    R2,ORIGSIZE         STORE NEW SIZE                       00000845
  846.          LH    R2,SENDLEN          RESTORE ORIGINAL SIZE                00000846
  847. CMDCTEST LA    R1,SENDDATA         R1 -> DATA (LENGTH IN R2)            00000847
  848.          TM    FLAGS2,COMP         COMPRESSION SUPPORTED?               00000848
  849.          BZ    CMDBIN              NO, CHECK FOR BINARY                 00000849
  850.          BAL   R14,COMPRESS        TRY TO COMPRESS DATA                 00000850
  851.          STH   R2,SENDLEN          STORE UPDATED LENGTH                 00000851
  852. CMDBIN   TM    FLAGS2,BINXF        BINARY TRANSFER?                     00000852
  853.          BZ    CMDLOOP             NO, CONTINUE NORMALLY                00000853
  854.          TM    FLAGS2,ASCBIN       BINARY USING ASCBIN SUPPORT?         00000854
  855.          BZ    CMDLOOP             NO, CONTINUE NORMALLY                00000855
  856.          BAL   R14,WRITABIN        SPECIAL ASCBIN CONVERSION            00000856
  857.          STH   R2,SENDLEN          STORE UPDATED LENGTH                 00000857
  858. CMDLOOP  L     R2,=A(RECVDATA)     R2 -> RESPONSE BUFFER                00000858
  859.          XC    0(8,R2),0(R2)       RESET START OF BUFFER                00000859
  860.          LH    R2,SENDLEN          GET LENGTH FOR WRITE                 00000860
  861.          TM    TRMFLAGS,MAC3270    APPLETALK CONNECTION?                00000861
  862.          BZ    CMDSCODE            NO, NEED START CODES                 00000862
  863.          LA    R1,SENDDATA         ELSE JUST RESTORE R1 -> DATA         00000863
  864.          B     CMDSOK                                                   00000864
  865.          SPACE                                                          00000865
  866. CMDSCODE LA    R2,2(R2)            ADJUST FOR START BYTE CODES          00000866
  867.          LA    R1,SENDSTRT         R1 -> FIRST BYTE                     00000867
  868. CMDSOK   EQU   *                   START CODE ADDED, IF NEEDED          00000868
  869.          STCK  STRTTIME            SAVE TOD CLOCK FOR RATE CALC.        00000869
  870.          MVC   WRCNT(4),ORIGSIZE   SAVE ORIGINAL BYTE COUNT             00000870
  871.          BAL   R14,WRITERD         WRITE DATA TO TERMINAL               00000871
  872. *                                    ALSO READ RESPONSE IF 3270         00000872
  873.          TM    TRMFLAGS,GRAFTRM    3270 TERMINAL?                       00000873
  874.          BO    SKIPREAD            RDTERM NOT NEEDED                    00000874
  875.          L     R3,=A(RECVDATA)     R3 -> BUFFER                         00000875
  876.          RDTERM (R3),EDIT=PHYS,LENGTH=1032  READ RESPONSE               00000876
  877.          STH   R0,RECVLEN                                               00000877
  878. SKIPREAD LH    R0,RECVLEN          READ LENGTH IN R0                    00000878
  879.          ST    R0,RDCNT            SAVE BYTE COUNT                      00000879
  880.          STCK  ENDTIME             SAVE TOD CLOCK FOR RATE CALC.        00000880
  881.          C     R0,=F'6'            ERROR IF < 6 BYTES                   00000881
  882.          BL    RETRY                                                    00000882
  883.          L     R1,=A(RECVDATA)     CHECK FOR CHECKSUM DELIMITER         00000883
  884.          AR    R1,R0                                                    00000884
  885.          S     R1,=F'5'            R1 -> WHERE DELIMITER SHOULD BE      00000885
  886.          CLI   0(R1),X'01'         RETRY IF NOT THERE                   00000886
  887.          BNE   RETRY                                                    00000887
  888.          SR    R3,R3               GET CHECKSUM BYTES IN R3             00000888
  889.          ICM   R3,B'1111',1(R1)                                         00000889
  890.          S     R0,=F'5'            R0 = DATA LENGTH                     00000890
  891.          STH   R0,RECVLEN          SAVE LENGTH                          00000891
  892.          L     R1,=A(RECVDATA)     R1 -> DATA                           00000892
  893.          BAL   R14,CHKCALC         GET CHECKSUM BYTES IN R2             00000893
  894.          CR    R2,R3               IF MATCH, USE DATA                   00000894
  895.          BE    CMDRTN                                                   00000895
  896. RETRY    C     R4,=F'5'            RETRY LIMIT REACHED?                 00000896
  897.          BNL   ABORT               IF SO, ABORT XFER                    00000897
  898.          LA    R4,1(R4)            INCREMENT COUNT                      00000898
  899.          L     R1,RETRYCNT         INCREMENT GLOBAL COUNT               00000899
  900.          LA    R1,1(R1)                                                 00000900
  901.          ST    R1,RETRYCNT                                              00000901
  902.          LA    R1,SUBCODE          R1 -> STRING                         00000902
  903.          LA    R2,1                R2 = LENGTH                          00000903
  904.          BAL   R14,WRITE           TELL VMXFER TO CALL "SUBSET"         00000904
  905.          BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00000905
  906.          WRTERM RETRYMSG,RMSGL,EDIT=NO  TYPE MESSAGE TO USER            00000906
  907.          BAL   R14,BEGINFS         RESUME FULL-SCREEN MODE              00000907
  908.          LA    R1,SUBCODE          R1 -> STRING                         00000908
  909.          LA    R2,1                R2 = LENGTH                          00000909
  910.          BAL   R14,WRITE           TELL VMXFER TO EXIT "SUBSET"         00000910
  911.          B     CMDLOOP             SEND COMMAND AGAIN                   00000911
  912.          SPACE 1                                                        00000912
  913. CMDRTN   BAL   R14,TIMEUPD         UPDATE XFER RATE                     00000913
  914.          BAL   R14,SUBCHK          CHECK FOR SUBSET MODE                00000914
  915.          BNZ   CMDLOOP             IF SUBSET, REPEAT COMMAND            00000915
  916.          LM    R0,R15,CMMDSAVE     RESTORE REGISTERS                    00000916
  917.          BR    R14                 RETURN TO CALLER                     00000917
  918.          SPACE                                                          00000918
  919. ABORT    LA    R1,ABORTSTR         R1 -> STRING                         00000919
  920.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00000920
  921.          BNE   ASTROK              NO, KEEP ABORTSTR                    00000921
  922.          LA    R1,ABRTSTRC         USE DIFFERENT STRING                 00000922
  923. ASTROK   LA    R2,3                R2 = LENGTH                          00000923
  924.          BAL   R14,WRITE           SEND ABORT COMMAND                   00000924
  925.          BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00000925
  926.          LINEDIT TEXT='DMSWMC007E Retry count exceeded',               X00000926
  927.                DISP=ERRMSG                                              00000927
  928.          LA    R15,256             STORE RETURN CODE                    00000928
  929.          ST    R15,RTNCODE                                              00000929
  930.          B     CMSRTN              RETURN TO CMS                        00000930
  931.          SPACE                                                          00000931
  932. CMMDSAVE DS    8D                  LOCAL SAVE AREA                      00000932
  933. ORIGSIZE DS    1F                  ORIGINAL SIZE FOR TIMING             00000933
  934.          EJECT                                                          00000934
  935. *                                  RETURN RC IN RECVDATA BUFFER         00000935
  936. *                                    OR 999 IF NO VALID RC              00000936
  937. READRC   EQU   *                                                        00000937
  938.          STM   R2,R15,RCSAVE       SAVE REGISTERS                       00000938
  939.          LA    R1,999              SET DEFAULT RETURN CODE              00000939
  940.          LH    R2,RECVLEN          MUST HAVE AT LEAST 6 BYTES           00000940
  941.          C     R2,=F'6'                                                 00000941
  942.          BL    RCRTN                                                    00000942
  943.          L     R4,=A(RECVDATA)     R4 -> BUFFER                         00000943
  944.          CLC   0(2,R4),=C'RC'      MUST START WITH "RC"                 00000944
  945.          BNE   RCRTN                                                    00000945
  946.          LA    R3,4                R3 = DIGIT COUNT                     00000946
  947.          LA    R4,2(R4)            R4 -> FIRST DIGIT                    00000947
  948.          SR    R5,R5               R5 = RESULT                          00000948
  949. CVTLOOP  EQU   *                                                        00000949
  950.          CLI   0(R4),C'0'          CHECK FOR VALID DIGIT                00000950
  951.          BL    RCRTN                                                    00000951
  952.          CLI   0(R4),C'9'                                               00000952
  953.          BH    RCRTN                                                    00000953
  954.          SR    R6,R6               CONVERT DIGIT TO BINARY              00000954
  955.          IC    R6,0(R4)                                                 00000955
  956.          S     R6,=F'240'                                               00000956
  957. CVTMULT  MH    R5,=H'10'           RESULT = RESULT*10 + DIGIT           00000957
  958.          AR    R5,R6                                                    00000958
  959.          LA    R4,1(R4)            R4 -> NEXT DIGIT                     00000959
  960.          BCT   R3,CVTLOOP          REPEAT FOR EACH DIGIT                00000960
  961.          LR    R1,R5               COPY RESULT INTO R1                  00000961
  962. RCRTN    LM    R2,R15,RCSAVE       RESTORE REGISTERS                    00000962
  963.          BR    R14                                                      00000963
  964.          SPACE                                                          00000964
  965. RCSAVE   DS    7D                  LOCAL SAVE AREA                      00000965
  966.          EJECT                                                          00000966
  967. * CALCULATE CHECKSUM FOR STRING: R0 = LENGTH, R1 -> CHARACTERS.         00000967
  968. * FOUR-BYTE CHECKSUM RETURNED IN R2.                                    00000968
  969. CHKCALC  EQU   *                                                        00000969
  970.          STM   R0,R15,CHKSAVE      SAVE REGISTERS                       00000970
  971.          SR    R5,R5               CHECKSUM = 0                         00000971
  972.          STC   R5,CHKFLAG          FLAGS = 0                            00000972
  973.          L     R3,=A(TOASCSTD)     R3 -> TRANSLATE TABLE                00000973
  974.          TM    FLAGS3,ALTTR        IF BROWN, USE SPECIAL TABLE          00000974
  975.          BZ    CHKBINCK                                                 00000975
  976.          L     R3,=A(TOASCBRN)                                          00000976
  977. CHKBINCK TM    FLAGS2,BINXF        BINARY XFER?                         00000977
  978.          BZ    CHKZERO             NO, CONTINUE NORMALLY                00000978
  979.          C     R0,=F'2'            AT LEAST 2 CHARACTERS?               00000979
  980.          BL    CHKZERO             NO, CONTINUE NORMALLY                00000980
  981.          CLC   0(2,R1),=C'WB'      WB COMMAND?                          00000981
  982.          BNE   CHKMH               NO, CONTINUE                         00000982
  983.          OI    CHKFLAG,CHKBIN      SUPPRESS TRANSLATION                 00000983
  984.          TR    0(6,R1),0(R3)       TRANSLATE 'WB' AND BLOCK NUMBER      00000984
  985.          TM    FLAGS,XFS           INCLUDING XFSPEED?                   00000985
  986.          BZ    CHKZERO             NO, KEEP AS IS                       00000986
  987.          TR    6(4,R1),0(R3)       ELSE TRANSLATE SPEED AS WELL         00000987
  988.          B     CHKZERO                                                  00000988
  989.          SPACE                                                          00000989
  990. CHKMH    CLC   0(2,R1),=C'MH'      MH COMMAND?                          00000990
  991.          BNE   CHKZERO             NO, KEEP AS IS                       00000991
  992.          OI    CHKFLAG,CHKBIN      SUPPRESS TRANSLATION                 00000992
  993.          TR    0(2,R1),0(R3)       TRANSLATE 'MH'                       00000993
  994. CHKZERO  LTR   R7,R0                                                    00000994
  995.          BZ    CHKCVT              IF LENGTH 0, KEEP 0 CHECKSUM         00000995
  996.          LR    R6,R1               R6 -> FIRST BYTE, R7 = BCT COUNT     00000996
  997.          L     R8,=V(CRCTAB)       R8 -> CRCTAB                         00000997
  998. CHKLOOP  EQU   *                   LOOP TO PROCESS EACH BYTE            00000998
  999.          SR    R4,R4                    R4 = DATA BYTE                  00000999
  1000.          IC    R4,0(R6)                                                 00001000
  1001.          TM    CHKFLAG,CHKBIN           BINARY DATA?                    00001001
  1002.          BO    CHKXOR                   YES, SKIP TRANSLATION           00001002
  1003.          IC    R4,0(R3,R4)              TRANSLATE TO ASCII              00001003
  1004. CHKXOR   XR    R4,R5                    XOR WITH LOW CHECKSUM BYTE      00001004
  1005.          N     R4,=X'000000FF'                                          00001005
  1006.          SRL   R5,8                     SHIFT CRC RIGHT 8 BITS          00001006
  1007.          SLL   R4,1                     GET TABLE INDEX                 00001007
  1008.          LH    R4,0(R4,R8)              R4 = HALFWORD FROM TABLE        00001008
  1009.          N     R4,=X'0000FFFF'                                          00001009
  1010.          XR    R5,R4                    XOR WITH CHECKSUM               00001010
  1011.          LA    R6,1(R6)                 R6 -> NEXT BYTE                 00001011
  1012.          BCT   R7,CHKLOOP               CONTINUE TO END                 00001012
  1013. CHKCVT   STCM  R5,B'0011',CHKDATA  STORE FINAL CHECKSUM                 00001013
  1014.          UNPK  CHKCHAR(5),CHKDATA(3)  CONVERT TO HEX CHARS.             00001014
  1015.          TR    CHKCHAR(4),HEXCHARS-240                                  00001015
  1016.          MVC   CHKSAVE+8(4),CHKCHAR  RETURN RESULT IN R2                00001016
  1017.          LM    R0,R15,CHKSAVE      RESTORE REGISTERS                    00001017
  1018.          BR    R14                                                      00001018
  1019. CHKSAVE  DS    8D                  LOCAL SAVE AREA                      00001019
  1020. HEXCHARS DC    C'0123456789ABCDEF' CHARACTERS FOR HEX CONVERSION        00001020
  1021. CHKDATA  DS    2X                  CHECKSUM BYTES                       00001021
  1022.          DS    1X                  EXTRA BYTE FOR UNPK                  00001022
  1023. CHKCHAR  DS    5X                  CHARACTER CHECKSUM                   00001023
  1024. CHKFLAG  DS    1X                  LOCAL FLAG BYTE                      00001024
  1025. CHKBIN   EQU   X'01'                    BINARY DATA                     00001025
  1026.          EJECT                                                          00001026
  1027. *                                                                       00001027
  1028. * "COMPRESS" ATTEMPTS TO COMPRESS THE DATA TO BE TRANSMITTED.           00001028
  1029. * A STRING OF BETWEEN 3 AND 97 REPEATED CHARACTERS IS COMPRESSED        00001029
  1030. * TO 3 CHARACTERS (THE CHARACTER FOLLOWED BY X'18' AND A COUNT).        00001030
  1031. *                                                                       00001031
  1032. COMPRESS DS    0H                                                       00001032
  1033.          C     R2,=F'8'            AT LEAST 3 DATA BYTES?               00001033
  1034.          BLR   R14                 NO, SKIP COMPRESSION                 00001034
  1035.          STM   R0,R15,COMPSAVE     SAVE REGISTERS                       00001035
  1036.          SR    R8,R8               R8 -> TRANSLATE TABLE                00001036
  1037.          TM    FLAGS2,BINXF        BINARY TRANSFER?                     00001037
  1038.          BZ    CSETTAB             NO, NEED TO TRANSLATE                00001038
  1039.          CLC   0(2,R1),=X'5742'    ASCII WB COMMAND?                    00001039
  1040.          BE    CTABOK              YES, KEEP R8 = 0                     00001040
  1041.          CLC   0(2,R1),=X'4D48'    ASCII MH COMMAND?                    00001041
  1042.          BE    CTABOK              YES, KEEP R8 = 0                     00001042
  1043. CSETTAB  L     R8,=A(FRASCSTD)     GET A(ASCII TO EBCDIC)               00001043
  1044.          TM    FLAGS3,ALTTR        NEED BROWN'S TABLE?                  00001044
  1045.          BZ    CTABOK              NO, CONTINUE                         00001045
  1046.          L     R8,=A(FRASCBRN)     R8 -> BROWN'S TABLE                  00001046
  1047. CTABOK   EQU   *                   R8 -> TABLE, OR ZERO                 00001047
  1048.          S     R2,=F'5'            OMIT CD, CRC FROM LENGTH             00001048
  1049.          LR    R7,R2               SAVE ORIG. LENGTH IN R7              00001049
  1050.          L     R3,=A(GRAFDATA)     R3 -> OUTPUT BUFFER                  00001050
  1051.          SR    R4,R4               R4 = OUTPUT LENGTH                   00001051
  1052. *                                  OUTPUT X'18' PREFIX                  00001052
  1053.          MVI   0(R3),X'18'         STORE PREFIX CHARACTER               00001053
  1054.          LA    R3,1(R3)            INCREMENT ADDRESS                    00001054
  1055.          LA    R4,1(R4)            INCREMENT COUNT                      00001055
  1056. *                                  OUTPUT FIRST CHARACTER               00001056
  1057.          SR    R6,R6               R6 = NEW CHARACTER                   00001057
  1058.          IC    R6,0(R1)                                                 00001058
  1059.          BAL   R9,CPUTCHR          CALL OUTPUT ROUTINE                  00001059
  1060.          LA    R1,1(R1)            INCREMENT INPUT POINTER              00001060
  1061.          BCTR  R2,0                DECREMENT INPUT LENGTH               00001061
  1062.          SR    R5,R5               STATE = 0                            00001062
  1063. COMPLOOP EQU   *                   LOOP FOR COMPRESSION                 00001063
  1064.          LR    R0,R6                    PREVIOUS = NEW CHARACTER        00001064
  1065.          IC    R6,0(R1)                 R6 = NEW CHARACTER              00001065
  1066.          LTR   R5,R5                    STATE 0?                        00001066
  1067.          BZ    CSTATE0                  YES, GO HANDLE                  00001067
  1068.          C     R5,=F'1'                 STATE 1?                        00001068
  1069.          BE    CSTATE1                  YES, GO HANDLE                  00001069
  1070.          B     CSTATE2                  ELSE MUST BE STATE 2            00001070
  1071.          SPACE                                                          00001071
  1072. CSTATE0  EQU   *                        NORMAL STATE                    00001072
  1073.          CR    R6,R0                    NEW CHAR. SAME AS PREVIOUS?     00001073
  1074.          BE    S0SAME                   YES, SAVE IT                    00001074
  1075.          BAL   R9,CPUTCHR               OUTPUT CHARACTER                00001075
  1076.          B     CMPLEND                  READY FOR NEXT CHARACTER        00001076
  1077.          SPACE                                                          00001077
  1078. S0SAME   LA    R5,1                     STATE = 1                       00001078
  1079.          B     CMPLEND                  READY FOR NEXT CHARACTER        00001079
  1080.          SPACE                                                          00001080
  1081. CSTATE1  EQU   *                        LAST CHAR. SAME AS PREVIOUS     00001081
  1082.          CR    R6,R0                    NEW CHAR. SAME AS PREVIOUS?     00001082
  1083.          BE    S1SAME                   YES, SAVE IT                    00001083
  1084.          ST    R6,NEWCHAR               SAVE NEW CHARACTER              00001084
  1085.          LR    R6,R0                    R6 = PREVIOUS CHARACTER         00001085
  1086.          BAL   R9,CPUTCHR               OUTPUT PREVIOUS CHARACTER       00001086
  1087.          L     R6,NEWCHAR               RESTORE NEW CHARACTER           00001087
  1088.          BAL   R9,CPUTCHR               OUTPUT NEW CHARACTER            00001088
  1089.          SR    R5,R5                    NEW STATE = 0                   00001089
  1090.          B     CMPLEND                  READY FOR NEXT CHARACTER        00001090
  1091.          SPACE                                                          00001091
  1092. S1SAME   LA    R9,3                     SET COUNT TO 3                  00001092
  1093.          ST    R9,CMPCOUNT                                              00001093
  1094.          LA    R5,2                     NEW STATE = 2                   00001094
  1095.          B     CMPLEND                  READY FOR NEXT CHARACTER        00001095
  1096.          SPACE                                                          00001096
  1097. CSTATE2  EQU   *                        LAST "COUNT" CHARS. SAME        00001097
  1098.          L     R9,CMPCOUNT              R9 = CURRENT COUNT              00001098
  1099.          C     R9,=F'97'                COUNT UP TO 97?                 00001099
  1100.          BE    S2DIFF                   YES, TREAT AS STRING END        00001100
  1101.          CR    R6,R0                    NEW CHAR. SAME AS PREVIOUS      00001101
  1102.          BNE   S2DIFF                   YES, HANDLE STRING END          00001102
  1103.          LA    R9,1(R9)                 INCREMENT COUNT                 00001103
  1104.          ST    R9,CMPCOUNT                                              00001104
  1105.          B     CMPLEND                  READY FOR NEXT CHARACTER        00001105
  1106.          SPACE                                                          00001106
  1107. S2DIFF   MVI   0(R3),X'18'              OUTPUT X'18'                    00001107
  1108.          LA    R3,1(R3)                 INC. OUTPUT POINTER             00001108
  1109.          LA    R4,1(R4)                 INC. OUTPUT LENGTH              00001109
  1110.          ST    R6,NEWCHAR               SAVE NEW CHARACTER              00001110
  1111.          LA    R6,29(R9)                COUNT -> ASCII IN R6            00001111
  1112.          LTR   R8,R8                    TRANSLATION NEEDED?             00001112
  1113.          BZ    S2USECNT                 NO, KEEP COUNT                  00001113
  1114.          IC    R6,0(R6,R8)              TRANSLATE TO EBCDIC             00001114
  1115. S2USECNT BAL   R9,CPUTCHR               OUTPUT COUNT                    00001115
  1116.          L     R6,NEWCHAR               RESTORE NEW CHARACTER           00001116
  1117.          BAL   R9,CPUTCHR               OUTPUT NEW CHARACTER            00001117
  1118.          SR    R5,R5                    NEW STATE = 0                   00001118
  1119. CMPLEND  EQU   *                        COMMON END OF LOOP              00001119
  1120.          LA    R1,1(R1)                 INCREMENT INPUT POINTER         00001120
  1121.          BCT   R2,COMPLOOP              REPEAT FOR INPUT LENGTH         00001121
  1122. *                                  CLEAN UP AFTER LAST CHARACTER        00001122
  1123.          LTR   R5,R5               LAST STATE 0?                        00001123
  1124.          BZ    CMPFIN              YES, READY TO FINISH                 00001124
  1125.          C     R5,=F'1'            LAST STATE 1?                        00001125
  1126.          BE    CMPCL1              YES, GO CLEANUP                      00001126
  1127.          B     CMPCL2              ELSE MUST BE STATE 2                 00001127
  1128.          SPACE                                                          00001128
  1129. CMPCL1   EQU   *                   CLEAN UP AFTER STATE 1               00001129
  1130.          BAL   R9,CPUTCHR          OUTPUT 2ND COPY OF CHARACTER         00001130
  1131.          B     CMPFIN              READY TO FINISH                      00001131
  1132.          SPACE                                                          00001132
  1133. CMPCL2   EQU   *                   CLEAN UP AFTER STATE 2               00001133
  1134.          MVI   0(R3),X'18'         OUTPUT X'18'                         00001134
  1135.          LA    R3,1(R3)            INC. OUTPUT POINTER                  00001135
  1136.          LA    R4,1(R4)            INC. OUTPUT LENGTH                   00001136
  1137.          LA    R6,29(R9)           COUNT -> ASCII IN R6                 00001137
  1138.          LTR   R8,R8               TRANSLATION NEEDED?                  00001138
  1139.          BZ    C2USECNT            NO, KEEP COUNT                       00001139
  1140.          IC    R6,0(R6,R8)         TRANSLATE TO EBCDIC                  00001140
  1141. C2USECNT BAL   R9,CPUTCHR          OUTPUT COUNT                         00001141
  1142.          SPACE                                                          00001142
  1143. CMPFIN   EQU   *                   FINISH- COPY DATA, CRC               00001143
  1144.          MVC   CRCSAVE(5),0(R1)    SAVE CD, CRC                         00001144
  1145.          L     R0,COMPSAVE+4       R0 -> INPUT BUFFER                   00001145
  1146.          L     R2,=A(GRAFDATA)     R2 -> OUTPUT BUFFER                  00001146
  1147.          LR    R1,R4               R1, R3 = FINAL LENGTH                00001147
  1148.          LR    R3,R4                                                    00001148
  1149.          MVCL  R0,R2               SUBSTITUTE COMPRESSED DATA           00001149
  1150.          LR    R1,R0               R1 -> AFTER DATA                     00001150
  1151.          MVC   0(5,R1),CRCSAVE     APPEND CD, CRC                       00001151
  1152.          LA    R4,5(R4)            R4 = LENGTH WITH CD, CRC             00001152
  1153.          ST    R4,COMPSAVE+8       STORE NEW LENGTH FOR R2              00001153
  1154.          LM    R0,R15,COMPSAVE     RESTORE REGISTERS                    00001154
  1155.          BR    R14                 RETURN                               00001155
  1156.          SPACE                                                          00001156
  1157. CPUTCHR  EQU   *                   OUTPUT CHARACTER IN R6               00001157
  1158.          STC   R6,0(R3)            STORE IN OUTPUT BUFFER               00001158
  1159.          LA    R3,1(R3)            INC. OUTPUT POINTER                  00001159
  1160.          LA    R4,1(R4)            INC. OUTPUT LENGTH                   00001160
  1161.          C     R6,COMPCHAR         COMPRESSION CHARACTER?               00001161
  1162.          BNE   CPUTEND             NO, DONE                             00001162
  1163.          STC   R6,0(R3)            OUTPUT CHARACTER AGAIN               00001163
  1164.          LA    R3,1(R3)            INC. OUTPUT POINTER                  00001164
  1165.          LA    R4,1(R4)            INC. OUTPUT LENGTH                   00001165
  1166. CPUTEND  CR    R4,R7               SMALLER THAN INPUT?                  00001166
  1167.          BLR   R9                  YES- RETURN                          00001167
  1168.          LM    R0,R15,COMPSAVE     NO- RETURN ORIG. STRING              00001168
  1169.          BR    R14                                                      00001169
  1170.          SPACE                                                          00001170
  1171. COMPSAVE DS    8D                  REGISTER SAVE AREA                   00001171
  1172. COMPCHAR DC    A(X'18')            COMPRESSION CHARACTER                00001172
  1173. NEWCHAR  DS    1F                  SAVED NEW CHARACTER                  00001173
  1174. CMPCOUNT DS    1F                  COMPRESSION COUNT                    00001174
  1175.          EJECT                                                          00001175
  1176. *                                                                       00001176
  1177. * "WRITABIN" WRITES BINARY DATA TO TERM VIA A LINE MODE OR 7171         00001177
  1178. * CONNECTION.  IT CHOOSES THE MOST EFFICIENT ENCODING METHOD,           00001178
  1179. * AND ENCODES THE OUTPUT DATA APPROPRIATELY.                            00001179
  1180. *                                                                       00001180
  1181. WRITABIN DS    0H                                                       00001181
  1182.          STM   R0,R15,WRITASAV     SAVE REGISTERS                       00001182
  1183.          LR    R3,R1               R3 = COPY OF ADDR.                   00001183
  1184.          LR    R4,R2               R2 = COPY OF LENGTH                  00001184
  1185.          C     R4,=F'6'            AT LEAST ONE BYTE?                   00001185
  1186.          BL    WRITAEND            NO, HANDLE NORMALLY                  00001186
  1187.          CLI   0(R3),X'18'         COMPRESSED LINE?                     00001187
  1188.          BNE   WRWBCHK             NO, KEEP ADDR., LENGTH               00001188
  1189.          LA    R3,1(R3)            R3 -> PAST PREFIX                    00001189
  1190.          BCTR  R4,0                R4 = NEW LENGTH                      00001190
  1191. WRWBCHK  C     R4,=F'7'            AT LEAST 2 DATA BYTES?               00001191
  1192.          BL    WRITAEND            NO, HANDLE NORMALLY                  00001192
  1193.          CLC   0(2,R3),=X'5742'    ASCII WB COMMAND?                    00001193
  1194.          BE    WRISWB              YES, DO BINARY PROCESSING            00001194
  1195.          CLC   0(2,R3),=X'4D48'    ASCII MH COMMAND?                    00001195
  1196.          BNE   WRITAEND            NO, HANDLE NORMALLY                  00001196
  1197. WRISWB   LR    R3,R2               R3 = TOTAL LENGTH                    00001197
  1198.          S     R3,=F'5'            R3 = DATA LENGTH                     00001198
  1199.          LA    R2,0(R1)            R2 -> FIRST DATA BYTE                00001199
  1200.          L     R4,=A(ABINDATA)     R4 -> BUFFER                         00001200
  1201.          LR    R5,R3               R5 = LENGTH                          00001201
  1202.          LR    R6,R4               SAVE ADDRESS AND LENGTH              00001202
  1203.          LR    R7,R5                                                    00001203
  1204.          MVCL  R4,R2               COPY DATA TO BUFFER                  00001204
  1205.          LR    R1,R6               R1 -> DATA                           00001205
  1206.          LR    R2,R7               R2 = LENGTH                          00001206
  1207.          L     R0,=A(ABINTAB)      R0 -> TABLE                          00001207
  1208.          BAL   R14,LONGTR          TRANSLATE DATA                       00001208
  1209.          SR    R5,R5               R5 COUNTS QUOTED BYTES               00001209
  1210. BINCNTLP EQU   *                   COUNT QUOTED BYTES                   00001210
  1211.          CLI   0(R1),X'15'              CHECK FOR QUOTE VALUES          00001211
  1212.          BE    INCQUOTE                                                 00001212
  1213.          CLI   0(R1),X'16'                                              00001213
  1214.          BNE   BCNTNXT                                                  00001214
  1215. INCQUOTE LA    R5,1(R5)                 INCREMENT COUNT                 00001215
  1216. BCNTNXT  LA    R1,1(R1)                 R1 -> NEXT BYTE                 00001216
  1217.          BCT   R2,BINCNTLP              REPEAT                          00001217
  1218.          LR    R6,R7               R6 = TOTAL LENGTH                    00001218
  1219.          SR    R6,R5               R6 = NORMAL BYTE COUNT               00001219
  1220.          SLL   R5,1                R5 = 2*QUOTED COUNT                  00001220
  1221.          LR    R7,R5               SAVE IN R7                           00001221
  1222. * MAKE COPY OF DATA                                                     00001222
  1223.          LM    R2,R3,WRITASAV+4    R2 -> STRING, R3 = LENGTH            00001223
  1224.          L     R4,=A(GRAFDATA)     USE GRAFDATA TEMPORARILY             00001224
  1225.          LR    R5,R3                                                    00001225
  1226.          MVCL  R4,R2               COPY DATA                            00001226
  1227.          CR    R7,R6               COMPARE COUNTS                       00001227
  1228.          BL    DOQUOTE             IF R7 LESS, USE QUOTING              00001228
  1229. DOPACK   EQU   *                   PACK DATA BYTES                      00001229
  1230.          LM    R1,R2,WRITASAV+4    RESTORE R1, R2                       00001230
  1231.          LA    R5,0(R1)            R5 -> NEXT OUTPUT BYTE               00001231
  1232.          S     R2,=F'5'            R2 = INPUT COUNT                     00001232
  1233.          LR    R6,R2               COPY IN R6                           00001233
  1234.          L     R4,=A(GRAFDATA)     R4 -> INPUT DATA                     00001234
  1235.          MVI   0(R5),X'17'         INDICATE PACKED DATA                 00001235
  1236.          LA    R5,1(R5)                                                 00001236
  1237. *                                  GET COUNT OF BYTES TO ADD            00001237
  1238.          LR    R3,R2               GET TOTAL IN R2, R3                  00001238
  1239.          SR    R2,R2                                                    00001239
  1240.          D     R2,=F'3'            DIVIDE BY 3                          00001240
  1241. *                                  R3 = PIECE COUNT                     00001241
  1242.          LTR   R2,R2               R2 = EXTRA COUNT                     00001242
  1243.          BZ    HAVEXTR             DONE IF ZERO                         00001243
  1244.          LA    R3,1(R3)            ADD ANOTHER PIECE                    00001244
  1245. HAVEXTR  LA    R6,0(R4,R6)         R6 -> PAST INPUT                     00001245
  1246.          MVC   CRCSAVE(5),0(R6)    SAVE CRC                             00001246
  1247.          MVI   0(R6),0             APPEND HEX ZEROS                     00001247
  1248.          MVI   1(R6),0                                                  00001248
  1249. HEXPLP   EQU   *                   LOOP TO EXPAND PIECES                00001249
  1250.          ICM   R7,B'1110',0(R4)         GET ALL 24 BITS IN R7           00001250
  1251.          SR    R6,R6                    GET FIRST 6 BITS IN R6          00001251
  1252.          SLDL  R6,6                                                     00001252
  1253.          LA    R6,X'20'(R6)             CONVERT TO ASCII                00001253
  1254.          STC   R6,0(R5)                 STORE FIRST RESULT BYTE         00001254
  1255.          SR    R6,R6                    REPEAT FOR 2ND BYTE             00001255
  1256.          SLDL  R6,6                                                     00001256
  1257.          LA    R6,X'20'(R6)             CONVERT TO ASCII                00001257
  1258.          STC   R6,1(R5)                                                 00001258
  1259.          SR    R6,R6                    REPEAT FOR 3RD BYTE             00001259
  1260.          SLDL  R6,6                                                     00001260
  1261.          LA    R6,X'20'(R6)             CONVERT TO ASCII                00001261
  1262.          STC   R6,2(R5)                                                 00001262
  1263.          SR    R6,R6                    REPEAT FOR 4TH BYTE             00001263
  1264.          SLDL  R6,6                                                     00001264
  1265.          LA    R6,X'20'(R6)             CONVERT TO ASCII                00001265
  1266.          STC   R6,3(R5)                                                 00001266
  1267.          LA    R4,3(R4)                 INCREMENT INPUT POINTER         00001267
  1268.          LA    R5,4(R5)                 INCREMENT OUTPUT POINTER        00001268
  1269.          BCT   R3,HEXPLP                REPEAT FOR PIECE COUNT          00001269
  1270.          LTR   R2,R2               LAST PIECE FULL?                     00001270
  1271.          BZ    PACKDONE            YES, THEN DONE                       00001271
  1272.          BCTR  R5,0                ELIMINATE 4TH BYTE                   00001272
  1273.          C     R2,=F'1'            REMAINDER ONE?                       00001273
  1274.          BNE   PACKDONE            NO, KEEP TWO RESULT BYTES            00001274
  1275.          BCTR  R5,0                ELIMINATE 3RD BYTE TOO               00001275
  1276. PACKDONE LR    R1,R5               R1 = OUTPUT POINTER                  00001276
  1277.          LA    R3,CRCSAVE          R3 -> CD, CRC                        00001277
  1278.          B     WRADDCRC            JOIN CRC CODE                        00001278
  1279.          SPACE                                                          00001279
  1280. DOQUOTE  EQU   *                   CONSTRUCT QUOTED DATA                00001280
  1281.          LM    R1,R2,WRITASAV+4    RESTORE R1, R2                       00001281
  1282. *                                  R1 -> NEXT OUTPUT BYTE               00001282
  1283.          S     R2,=F'5'            R2 = INPUT COUNT                     00001283
  1284.          L     R3,=A(GRAFDATA)     R3 -> INPUT DATA                     00001284
  1285.          L     R4,=A(ABINDATA)     R4 -> TRANSLATED DATA                00001285
  1286.          SR    R5,R5               R5, R6 = 0 FOR IC                    00001286
  1287.          SR    R6,R6                                                    00001287
  1288.          LA    R7,X'15'            R7 = X'15' FOR COMPARISONS           00001288
  1289. QUOTELP  EQU   *                   QUOTING LOOP                         00001289
  1290.          IC    R5,0(R3)                 R5 = NEW BYTE                   00001290
  1291.          IC    R6,0(R4)                 R6 = TRANSLATED VALUE           00001291
  1292.          LTR   R6,R6                    KEEP BYTE?                      00001292
  1293.          BZ    QKEEP                                                    00001293
  1294.          STC   R6,0(R1)                 ELSE STORE R6                   00001294
  1295.          CR    R6,R7                    CHECK FOR QUOTE VALUE           00001295
  1296.          BL    QNEXT                    DONE IF NO QUOTE                00001296
  1297.          LA    R1,1(R1)                 INCREMENT FOR QUOTE             00001297
  1298.          BE    QUOTE15                  X'15' QUOTE?                    00001298
  1299. *                                       ELSE MUST BE X'16':             00001299
  1300.          S     R5,=F'144'               CONVERT X'B0' - X'FF'           00001300
  1301.          B     QKEEP                    AND USE IT                      00001301
  1302.          SPACE                                                          00001302
  1303. QUOTE15  C     R5,=F'32'                CONTROL CHAR.?                  00001303
  1304.          BL    QCTL                     YES, DIFFERENT CONVERSION       00001304
  1305.          S     R5,=F'63'                CONVERT X'7F' - X'AF'           00001305
  1306.          B     QKEEP                                                    00001306
  1307.          SPACE                                                          00001307
  1308. QCTL     A     R5,=F'32'                CONVERT X'00' - X'1F'           00001308
  1309. QKEEP    STC   R5,0(R1)                 USE BYTE AS IS                  00001309
  1310. QNEXT    LA    R1,1(R1)                                                 00001310
  1311.          LA    R3,1(R3)                 INCREMENT POINTERS              00001311
  1312.          LA    R4,1(R4)                                                 00001312
  1313.          BCT   R2,QUOTELP                                               00001313
  1314. WRADDCRC EQU   *                   HANDLE CRC AT END                    00001314
  1315.          MVC   0(5,R1),0(R3)       APPEND CRC                           00001315
  1316.          LA    R2,5(R1)            R2 -> AFTER CRC                      00001316
  1317.          L     R3,WRITASAV+4       GET LENGTH IN R2                     00001317
  1318.          LA    R3,0(R3)              = END ADDRESS -                    00001318
  1319.          SR    R2,R3                   START ADDRESS                    00001319
  1320.          ST    R2,WRITASAV+8       STORE LENGTH TO USE                  00001320
  1321.          TM    TRMFLAGS,GRAFTRM    3270 TERMINAL?                       00001321
  1322.          BO    WRITAEND            YES, KEEP ASCII                      00001322
  1323.          LM    R1,R2,WRITASAV+4    GET RESULT REGS.                     00001323
  1324.          S     R2,=F'5'            DON'T INCLUDE CRC                    00001324
  1325.          L     R0,=A(FRASCSTD)     R0 = DEFAULT TABLE                   00001325
  1326.          TM    FLAGS3,ALTTR        IF BROWN, USE SPECIAL TABLE          00001326
  1327.          BZ    QTOEBC                                                   00001327
  1328.          L     R0,=A(FRASCBRN)                                          00001328
  1329. QTOEBC   BAL   R14,LONGTR          TRANSLATE TO EBCDIC                  00001329
  1330. WRITAEND LM    R0,R15,WRITASAV     RESTORE REGISTERS                    00001330
  1331.          BR    R14                 RETURN                               00001331
  1332.          SPACE                                                          00001332
  1333. WRITASAV DS    8D                  LOCAL SAVE AREA                      00001333
  1334. CRCSAVE  DS    6X                  SAVED CRC                            00001334
  1335.          EJECT                                                          00001335
  1336. *                                                                       00001336
  1337. * "WRITE" OUTPUTS A CHARACTER STRING TO THE TERMINAL. NO EXTRA          00001337
  1338. * BYTES (E.G. DC3) ARE TRANSMITTED FOLLOWING THE STRING.                00001338
  1339. * AT ENTRY, R1 -> STRING, AND R2 CONTAINS THE STRING LENGTH.            00001339
  1340. *                                                                       00001340
  1341. WRITE    DS    0H                                                       00001341
  1342.          MVI   WMODE,0             INDICATE WRITE ONLY                  00001342
  1343.          B     WRBOTH                                                   00001343
  1344.          SPACE                                                          00001344
  1345. WRITERD  DS    0H                                                       00001345
  1346.          MVI   WMODE,X'FF'         INDICATE READ ALSO                   00001346
  1347. WRBOTH   STM   R0,R15,WRSAVE       SAVE REGISTERS                       00001347
  1348.          TM    TRMFLAGS,GRAFTRM    3270 TERMINAL?                       00001348
  1349.          BO    WRITEGRF            YES, DO 3270 I/O                     00001349
  1350.          LR    R3,R1               COPY STRING ADDRESS INTO R3          00001350
  1351. *                                  R2 = LENGTH, R3 = ADDRESS OF STRING  00001351
  1352.          LTR   R2,R2               ANY BYTES LEFT?                      00001352
  1353.          BNP   WRRTN               IF NOT, RETURN                       00001353
  1354.          WRTERM (R3),(R2),EDIT=LONG  WRITE (R2) BYTES FROM (R3)         00001354
  1355.          B     WRRTN               RETURN                               00001355
  1356.          EJECT                                                          00001356
  1357. WRITEGRF EQU   *                   3270 OUTPUT                          00001357
  1358.          LTR   R2,R2               IF NO BYTES, JUST RETURN             00001358
  1359.          BZ    WRRTN                                                    00001359
  1360.          L     R8,=A(GRAFDATA)     R8 ADDRESSES GRAFDATA                00001360
  1361.          USING GRAFDATA,R8                                              00001361
  1362. *                                  STORE XPARENT OR WSF PREFIX          00001362
  1363.          TM    TRMFLAGS,MAC3270    WSF FOR MAC3270                      00001363
  1364.          BO    WSFPFX                                                   00001364
  1365.          MVC   GRAFDATA(7),=X'F3115D7F110000' XPARENT WRITE CODE        00001365
  1366.          LA    R3,7                                                     00001366
  1367.          CLI   WMODE,0             JUST WRITE?                          00001367
  1368.          BE    ADDPFX              YES, HAVE THE RIGHT PREFIX           00001368
  1369.          MVI   GRAFDATA+6,X'01'    ELSE CHANGE TO WRITE/READ            00001369
  1370.          LA    R4,0(R1,R2)         R4 -> PAST LAST BYTE                 00001370
  1371.          MVC   0(4,R4),=X'0D256E12'  SIMULATE LINE MODE PROMPT          00001371
  1372.          LA    R2,4(R2)            ADJUST LENGTH                        00001372
  1373.          B     ADDPFX                                                   00001373
  1374.          SPACE                                                          00001374
  1375. WSFPFX   LA    R3,3(R2)            GET WSF LENGTH AND STORE             00001375
  1376.          STCM  R3,B'0011',GRAFDATA                                      00001376
  1377.          MVI   GRAFDATA+2,X'20'    APPEND XFER CODE                     00001377
  1378.          LA    R3,3                R3 = TOTAL LENGTH                    00001378
  1379. ADDPFX   LA    R4,GRAFDATA(R3)     R4 -> PAST PREFIX                    00001379
  1380.          LR    R6,R1               R6 -> SOURCE DATA                    00001380
  1381.          LR    R1,R4               SAVE NEW LOCATION IN R1              00001381
  1382.          LR    R5,R2               R5, R7 = LENGTH                      00001382
  1383.          LR    R7,R2                                                    00001383
  1384.          MVCL  R4,R6               COPY DATA TO BUFFER                  00001384
  1385. *                                  R1 = ADDR., R2 = LENGTH              00001385
  1386.          L     R0,=A(TOASCSTD)     R0 -> TRANSLATE TABLE                00001386
  1387.          TM    FLAGS3,ALTTR        IF BROWN USE SPECIAL TABLE           00001387
  1388.          BZ    WRBINCK                                                  00001388
  1389.          L     R0,=A(TOASCBRN)                                          00001389
  1390. WRBINCK  TM    FLAGS2,BINXF        BINARY TRANSFER?                     00001390
  1391.          BZ    WRITETR             NO, NORMAL TRANSLATE                 00001391
  1392.          TM    FLAGS2,ASCBIN       ASCBIN MODE?                         00001392
  1393.          BO    WRABNCK             YES, INCLUDE START BYTES             00001393
  1394. *                                  APPLETALK BINARY CHECKS:             00001394
  1395.          LR    R4,R1               R4 = COPY OF ADDRESS                 00001395
  1396.          LR    R5,R2               R5 = COPY OF LENGTH                  00001396
  1397.          C     R5,=F'6'            AT LEAST ONE BYTE?                   00001397
  1398.          BL    WRITETR             NO, NORMAL TRANSLATE                 00001398
  1399.          CLI   0(R4),X'18'         COMPRESSED DATA?                     00001399
  1400.          BNE   WRGACHK             NO, KEEP ADDR., LENGTH               00001400
  1401.          LA    R4,1(R4)            R4 -> PAST PREFIX                    00001401
  1402.          BCTR  R5,0                R5 = NEW LENGTH                      00001402
  1403. WRGACHK  C     R5,=F'7'            AT LEAST COMMAND, CHECKSUM?          00001403
  1404.          BL    WRITETR             NO, NORMAL TRANSLATE                 00001404
  1405.          CLC   0(2,R4),=X'5742'    ASCII WB COMMAND?                    00001405
  1406.          BE    WRGWB               YES, SPECIAL HANDLING                00001406
  1407.          CLC   0(2,R4),=X'4D48'    ASCII MH COMMAND?                    00001407
  1408.          BNE   WRITETR             NO, NORMAL TRANSLATE                 00001408
  1409. WRGWB    LR    R4,R0               COPY TABLE ADDRESS INTO R4           00001409
  1410.          LA    R5,0(R1,R2)         R5 -> PAST LAST BYTE                 00001410
  1411.          S     R5,=F'5'            R5 -> CHECKSUM DELIMITER             00001411
  1412.          TR    0(5,R5),0(R4)       TRANSLATE CD, CHECKSUM               00001412
  1413.          B     WRTROK              CONTINUE WITH I/O                    00001413
  1414.          SPACE                                                          00001414
  1415. *                                  SERIAL BINARY CHECKS:                00001415
  1416. WRABNCK  LR    R4,R1               R4 = COPY OF ADDRESS                 00001416
  1417.          LR    R5,R2               R5 = COPY OF LENGTH                  00001417
  1418.          C     R5,=F'12'           AT LEAST ONE DATA BYTE?              00001418
  1419.          BL    WRITETR             NO, NORMAL TRANSLATE                 00001419
  1420.          CLI   2(R4),X'17'         PACKED DATA?                         00001420
  1421.          BE    WRABNOK             YES, MUST BE WB OR MH                00001421
  1422.          CLI   2(R4),X'18'         COMPRESSED DATA?                     00001422
  1423.          BNE   WRGSCHK             NO, KEEP ADDR., LENGTH               00001423
  1424.          LA    R4,1(R4)            ADJUST ADDR. AND LENGTH              00001424
  1425.          BCTR  R5,0                  TO SKIP PREFIX                     00001425
  1426. WRGSCHK  C     R5,=F'13'           COMMAND, CRC, PROMPT?                00001426
  1427.          BL    WRITETR             NO, NORMAL TRANSLATE                 00001427
  1428.          CLC   2(2,R4),=X'5742'    ASCII WB COMMAND?                    00001428
  1429.          BE    WRABNOK             YES, SPECIAL TRANSLATE               00001429
  1430.          CLC   2(2,R4),=X'4D48'    ASCII MH COMMAND?                    00001430
  1431.          BNE   WRITETR             NO, NORMAL TRANSLATE                 00001431
  1432. WRABNOK  LR    R4,R0               COPY TABLE ADDRESS INTO R4           00001432
  1433.          LA    R5,0(R1,R2)         R5 -> PAST LAST BYTE                 00001433
  1434.          S     R5,=F'9'            R5 -> CHECKSUM DELIMITER             00001434
  1435.          TR    0(9,R5),0(R4)       TRANSLATE CD, CKSUM, PROMPT          00001435
  1436.          B     WRTROK              CONTINUE WITH I/O                    00001436
  1437.          SPACE                                                          00001437
  1438. WRITETR  BAL   R14,LONGTR          TRANSLATE TO ASCII                   00001438
  1439. WRTROK   TM    TRMFLAGS,MAC3270    SKIP NEXT XLATE IF MAC3270           00001439
  1440.          BO    WRDEFCCW                                                 00001440
  1441.          L     R0,=A(HBITTAB)      R0 -> TABLE                          00001441
  1442.          BAL   R14,LONGTR          TURN ON HIGH BIT OF ALL DATA         00001442
  1443. WRDEFCCW LA    R3,0(R2,R3)         R3 = TOTAL LENGTH                    00001443
  1444.          LH    R2,CONADDR          R2 = CONSOLE ADDRESS                 00001444
  1445.          ICM   R2,B'1000',=X'01'   INDICATE CMS CONSOLE                 00001445
  1446.          LA    R13,R13SAVE         R13 -> SAVE AREA                     00001446
  1447.          TM    TRMFLAGS,MAC3270    USE WSF FOR MAC3270                  00001447
  1448.          BO    WRWSF                                                    00001448
  1449. *                                  ELSE 7171 XPARENT WRITE              00001449
  1450.          STH   R3,WCCWLEN          STORE DATA SIZE                      00001450
  1451.          LA    R1,WCCW             R1 -> CCW                            00001451
  1452.          L     R15,=V(SCRIO)       R15 -> ENTRY POINT                   00001452
  1453.          BALR  R14,R15             EXECUTE TRANSPARENT WRITE            00001453
  1454.          BNZ   WRRTN               RETURN IF ERROR                      00001454
  1455.          BAL   R14,READ3270        WAIT FOR ATTN & ISSUE READ           00001455
  1456.          CLI   WMODE,0             JUST WRITE?                          00001456
  1457.          BE    WRRTN               YES, THEN RETURN NOW                 00001457
  1458.          B     WRREAD              PROCESS READ                         00001458
  1459.          SPACE                                                          00001459
  1460. WRWSF    STH   R3,WSFCCWLN         STORE LENGTH                         00001460
  1461.          LA    R1,WSFCCW3          R1 -> CCW                            00001461
  1462.          L     R15,=V(SCRIO)       R15 -> ENTRY POINT                   00001462
  1463.          BALR  R14,R15             EXECUTE WSF                          00001463
  1464.          BNZ   WRRTN               RETURN IF ERROR                      00001464
  1465.          CLI   WMODE,0             JUST WRITE?                          00001465
  1466.          BE    WRRTN               YES, THEN RETURN NOW                 00001466
  1467.          BAL   R14,READ3270        WAIT FOR ATTN & ISSUE READ           00001467
  1468. WRREAD   EQU   *                   PROCESS READ                         00001468
  1469.          LA    R1,GRAFDATA         R1 -> DATA                           00001469
  1470.          LH    R2,GRAFLEN          R2 = LENGTH                          00001470
  1471.          XC    RECVLEN(2),RECVLEN  SET LENGTH TO ZERO                   00001471
  1472.          LTR   R2,R2               ANY BYTES READ?                      00001472
  1473.          BNP   WRRTN               NO, JUST RETURN                      00001473
  1474.          TM    TRMFLAGS,MAC3270    FOR MAC3270 SKIP AID                 00001474
  1475.          BO    SKIPAID                                                  00001475
  1476.          CLI   0(R1),X'E8'         CHECK FOR NULL AID                   00001476
  1477.          BNE   WRRTN               RETURN IF NOT THERE                  00001477
  1478.          LA    R1,3(R1)            SKIP 7171 AID AND ADDR.              00001478
  1479.          S     R2,=F'4'            ALSO SKIP CR AT END                  00001479
  1480.          B     WRRDCOM                                                  00001480
  1481.          SPACE                                                          00001481
  1482. SKIPAID  CLI   0(R1),X'88'         CHECK FOR WSF REPLY AID              00001482
  1483.          BNE   WRRTN               RETURN IF NOT THERE                  00001483
  1484.          LA    R1,1(R1)            SKIP AID                             00001484
  1485.          BCTR  R2,0                ADJUST LENGTH                        00001485
  1486. WRRDCOM  LTR   R2,R2               ANY BYTES LEFT                       00001486
  1487.          BNP   WRRTN               NO, JUST RETURN                      00001487
  1488.          STH   R2,RECVLEN          STORE LENGTH FOR RECEIVE             00001488
  1489.          LR    R3,R2               R3, R5 = LENGTH                      00001489
  1490.          LR    R5,R2                                                    00001490
  1491.          L     R2,=A(RECVDATA)     R2 -> DESTINATION                    00001491
  1492.          LR    R4,R1               R4 -> SOURCE                         00001492
  1493.          MVCL  R2,R4               MOVE DATA                            00001493
  1494.          L     R0,=A(FRASCSTD)     R0 -> TRANSLATE TABLE                00001494
  1495.          TM    FLAGS3,ALTTR        IF BROWN, USE SPECIAL TABLE          00001495
  1496.          BZ    WRITETR2                                                 00001496
  1497.          L     R0,=A(FRASCBRN)                                          00001497
  1498. WRITETR2 L     R1,=A(RECVDATA)     R1 -> DATA                           00001498
  1499.          LH    R2,RECVLEN          R2 = LENGTH                          00001499
  1500.          BAL   R14,LONGTR          TRANSLATE DATA TO EBCDIC             00001500
  1501. WRRTN    LM    R0,R15,WRSAVE       RESTORE REGISTERS                    00001501
  1502.          BR    R14                 RETURN TO CALLER                     00001502
  1503.          SPACE                                                          00001503
  1504. WRSAVE   DC    8D'0'               SAVE AREA FOR R0-R15                 00001504
  1505. WMODE    DS    1X                  >0 = WRITE, READ FOR 3270            00001505
  1506.          DROP   R8                 END GRAFDATA ADDRESSABILITY          00001506
  1507.          EJECT                                                          00001507
  1508. *                                                                       00001508
  1509. * SUBCHK - CHECK FOR SUBSET MODE                                        00001509
  1510. * IF THE LAST COMMAND RESULTED IN RETURN CODE 11, ENTER SUBSET MODE,    00001510
  1511. * OR KEEP THE RETURN CODE AS IS TO ABORT THE TRANSFER.                  00001511
  1512. *                                                                       00001512
  1513. SUBCHK   DS    0H                                                       00001513
  1514.          STM   R0,R15,SUBSAVE      SAVE REGISTERS                       00001514
  1515.          SR    R8,R8               R8 = 0 FOR NORMAL RETURN             00001515
  1516.          L     R1,=A(RECVDATA)     R1 -> INPUT BUFFER                   00001516
  1517.          CLC   0(6,R1),=C'RC0011'  ABORT/SUBSET RETURN CODE?            00001517
  1518.          BNE   SUBRETN             IF NOT, CONTINUE NORMALLY            00001518
  1519. * RESTORE NORMAL TERMINAL ENVIRONMENT TEMPORARILY                       00001519
  1520.          TM    TRMFLAGS,GRAFTRM    SKIP ASCII STUFF IF 3270             00001520
  1521.          BO    WSUBCODE                                                 00001521
  1522.          CLC   NODEID(8),BROWNID   SKIP PROMPT COMMAND IF NOT BROWN     00001522
  1523.          BNE   PRSKIP2                                                  00001523
  1524.          LINEDIT TEXT='TERM PROMPT ON',DOT=NO,DISP=CPCOMM               00001524
  1525. PRSKIP2  EQU    *                                                       00001525
  1526.          LINEDIT TEXT='TERM LINESIZE 80',DISP=CPCOMM,DOT=NO             00001526
  1527.          LINEDIT TEXT='SET LINEDIT ON',DISP=CPCOMM,DOT=NO               00001527
  1528.          DMSEXS MVC,AINTRTBL(4),INTAB  RESTORE XLATE TABLES             00001528
  1529.          DMSEXS MVC,AOUTRTBL(4),OUTTAB                                  00001529
  1530. WSUBCODE LA    R1,SUBCODE          R1 -> STRING                         00001530
  1531.          LA    R2,1                R2 = LENGTH                          00001531
  1532.          BAL   R14,WRITE           TELL VMXFER TO CALL "SUBSET"         00001532
  1533.          BAL   R14,ENDFS           EXIT FULL-SCREEN MODE                00001533
  1534. SUBPRMT  WRTERM 'Enter ABORT, CONTINUE, or SUBSET',EDIT=NO              00001534
  1535.          RDTERM RDRESP             READ RESPONSE                        00001535
  1536.          CLC   RDRESP(7),=CL7'SUBSET'   ENTER SUBSET MODE IF WANTED     00001536
  1537.          BE    SUBSET                                                   00001537
  1538.          CLC   RDRESP(6),=CL6'ABORT'    ABORT IF WANTED                 00001538
  1539.          BE    SUBREST                                                  00001539
  1540.          CLC   RDRESP(9),=CL9'CONTINUE' JUST CONTINUE IF SPECIFIED      00001540
  1541.          BE    SUBCONT                                                  00001541
  1542.          B     SUBPRMT             ELSE TRY AGAIN FOR VALID ANSWER      00001542
  1543.          SPACE                                                          00001543
  1544. SUBSET   LA    R1,SUBCMMD          ENTER SUBSET MODE                    00001544
  1545.          SVC   202                 "SUBSET" COMMAND                     00001545
  1546.          DC    AL4(*+4)                                                 00001546
  1547. SUBCONT  LA    R8,1                INDICATE CP/M COMMAND RETRY          00001547
  1548.          SPACE                                                          00001548
  1549. SUBREST  EQU   *                   RESTORE XFER ENVIRONMENT             00001549
  1550.          BAL   R14,BEGINFS         RESTORE FULL-SCREEN MODE             00001550
  1551.          LA    R1,SUBCODE          R1 -> STRING                         00001551
  1552.          LA    R2,1                R2 = LENGTH                          00001552
  1553.          BAL   R14,WRITE           TELL VMXFER TO RETURN TO MAIN LOOP   00001553
  1554.          TM    TRMFLAGS,GRAFTRM    IF 3270, READY TO RETURN             00001554
  1555.          BO    SUBRETN                                                  00001555
  1556.          MVC   INTAB(4),AINTRTBL   SAVE "SET INPUT" TABLE               00001556
  1557.          MVC   OUTTAB(4),AOUTRTBL  SAVE "SET OUTPUT" TABLE              00001557
  1558.          DMSEXS XC,AINTRTBL(4),AINTRTBL  RESET INPUT TRANSLATION        00001558
  1559.          DMSEXS XC,AOUTRTBL(4),AOUTRTBL  RESET OUTPUT TRANSLATION       00001559
  1560.          LINEDIT TEXT='SET LINEDIT OFF',DISP=CPCOMM,DOT=NO              00001560
  1561.          LINEDIT TEXT='TERM LINESIZE OFF',DISP=CPCOMM,DOT=NO            00001561
  1562.          CLC   NODEID(8),BROWNID   SET PROMPT IF BROWN                  00001562
  1563.          BNE   SUBRETN                                                  00001563
  1564.          LINEDIT TEXTA=PRMTCMD,DISP=CPCOMM,DOT=NO                       00001564
  1565. SUBRETN  LTR   R8,R8               SET CC FOR CPMCMMD                   00001565
  1566.          LM    R0,R15,SUBSAVE      RESTORE REGISTERS                    00001566
  1567.          BR    R14                 RETURN TO CPMCMMD                    00001567
  1568.          SPACE                                                          00001568
  1569. SUBSAVE  DC    8D'0'               SAVE AREA R0-R15                     00001569
  1570. SUBCMMD  DC    CL8'SUBSET'         "SUBSET" COMMAND                     00001570
  1571.          DC    8X'FF'                                                   00001571
  1572. SUBCODE  DC    X'3C'               DC4 IS VMXFER SUBSET CODE            00001572
  1573.          EJECT                                                          00001573
  1574. *                                                                       00001574
  1575. * CALCULATE CP/M SECTOR COUNT FOR FILE                                  00001575
  1576. *                                                                       00001576
  1577. SIZECALC DS    0H                  R1 -> FST                            00001577
  1578.          STM   R0,R15,SIZESAVE     SAVE REGISTERS                       00001578
  1579.          LR    R2,R1               ADDRESS FST                          00001579
  1580.          USING FSTD,R2                                                  00001580
  1581.          CLI   FSTRECFM,C'V'       FOR RECFM V, HAVE TO READ DATA       00001581
  1582.          BE    VCALC                                                    00001582
  1583.          TM    FLAGS,TEXT          LIKEWISE FOR TEXT OPTION             00001583
  1584.          BO    VCALC                                                    00001584
  1585.          SR    R0,R0               R0, R1 = RECORD COUNT                00001585
  1586.          L     R1,FSTAIC                                                00001586
  1587.          M     R0,FSTLRECL         MULTIPLY BY RECORD LENGTH            00001587
  1588.          B     SECTCALC            GET SECTORS                          00001588
  1589.          SPACE                                                          00001589
  1590. VCALC    SR    R3,R3               BYTE COUNT = 0                       00001590
  1591.          L     R4,INPBUF           R4 -> INPUT BUFFER                   00001591
  1592.          MVC   FSCBAITN(4),=F'0'   SET-UP FSREAD PLIST                  00001592
  1593.          ST    R4,FSCBBUFF                                              00001593
  1594.          MVC   FSCBSIZE(4),FSTLRECL                                     00001594
  1595.          MVC   FSCBANIT(4),=F'1'                                        00001595
  1596.          OI    FLAGS,BLNKLINE      TREAT AS LAST LINE BLANK             00001596
  1597. VCALCLP  EQU   *                                                        00001597
  1598.          FSREAD FSCB=INFILE,FORM=E      CALL FSREAD                     00001598
  1599.          LTR   R15,R15             STOP AT FIRST ERROR                  00001599
  1600.          BNZ   VCEND                                                    00001600
  1601.          TM    FLAGS2,BINXF        BINARY TRANSFER?                     00001601
  1602.          BO    VCKEEP              YES, ALWAYS USE ACTUAL LENGTH        00001602
  1603.          TM    FLAGS,TEXT          EXTRA WORK IF TEXT OPTION            00001603
  1604.          BO    TXTCALC                                                  00001604
  1605. VCKEEP   AL    R3,FSCBNORD         INCREMENT BYTE COUNT                 00001605
  1606.          B     VCALCLP             GET NEXT LINE                        00001606
  1607.          SPACE                                                          00001607
  1608. TXTCALC  L     R5,FSCBNORD         ADJUST LENGTH TO DELETE TRAILING     00001608
  1609. *                                    BLANKS                             00001609
  1610. TXTCLP   EQU   *                   LOOP TO FIND LAST NON-BLANK          00001610
  1611.          LA    R6,0(R4,R5)           POINT TO NEXT BYTE FROM RIGHT      00001611
  1612.          BCTR  R6,0                                                     00001612
  1613.          CLI   0(R6),C' '            USE LENGTH IN R5 IF NON-BLANK      00001613
  1614.          BNE   TXTCADD                                                  00001614
  1615.          BCT   R5,TXTCLP             REPEAT                             00001615
  1616.          LA    R5,1                LENGTH FOR CR IS 1                   00001616
  1617.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00001617
  1618.          BNE   KEEPCRC             NO, CONTINUE                         00001618
  1619.          LA    R5,2                ELSE INCLUDE LF                      00001619
  1620. KEEPCRC  TM    FLAGS,TRUNCATE      TRUNCATE OPTION?                     00001620
  1621.          BO    TXTCLOK             YES, SKIP BLNKLINE TEST              00001621
  1622.          TM    FLAGS,BLNKLINE      WAS LAST LINE BLANK?                 00001622
  1623.          BO    TXTCLOK             IF SO, KEEP 1 CR                     00001623
  1624.          LA    R5,2                                                     00001624
  1625.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00001625
  1626.          BNE   TXTCLOK             NO, CONTINUE                         00001626
  1627.          LA    R5,4                ELSE INCLUDE LF                      00001627
  1628. TXTCLOK  OI    FLAGS,BLNKLINE      REMEMBER HAD BLANK LINE              00001628
  1629.          B     TXTCLNOK            DONE WITH LINE                       00001629
  1630.          SPACE                                                          00001630
  1631. TXTCADD  NI    FLAGS,255-BLNKLINE  REMEMBER LINE NOT BLANK              00001631
  1632.          LA    R5,1(R5)            ACCOUNT FOR BLANK OR LF AT END       00001632
  1633.          TM    FLAGS,TRUNCATE      TRUNCATE OPTION?                     00001633
  1634.          BZ    TXTCLNOK            NO, ALL SET                          00001634
  1635.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00001635
  1636.          BNE   TXTCLNOK            NO, ALL SET                          00001636
  1637.          LA    R5,1(R5)            ALSO INCLUDE CR                      00001637
  1638. TXTCLNOK ALR   R3,R5                                                    00001638
  1639.          B     VCALCLP             GET NEXT LINE                        00001639
  1640.          SPACE 1                                                        00001640
  1641. VCEND    FSCLOSE FSCB=INFILE       CLOSE FILE                           00001641
  1642.          LR    R1,R3               COPY BYTE COUNT                      00001642
  1643.          TM    FLAGS,TEXT          ALREADY HAVE FINAL COUNT IF TEXT     00001643
  1644.          BO    SECTRND                                                  00001644
  1645. SECTCALC TM    FLAGS2,BINXF        BINARY TRANSFER?                     00001645
  1646.          BO    SECTRND             YES, NO EXTRA CHARACTERS ADDED       00001646
  1647.          AL    R1,FSTAIC           ACCOUNT FOR CR AT END                00001647
  1648.          CLI   VERSDATA,C'C'       CP/M SYSTEM?                         00001648
  1649.          BNE   SECTRND             NO, CONTINUE                         00001649
  1650.          AL    R1,FSTAIC           ELSE ALSO INCLUDE LINEFEED           00001650
  1651. SECTRND  TM    FLAGS2,BINXF        BINARY TRANSFER?                     00001651
  1652.          BO    SECTDIV             YES, USE COUNT AS IS                 00001652
  1653.          LA    R1,1(R1)            ELSE ADD 1 FOR CP/M EOF              00001653
  1654. SECTDIV  ST    R1,TOTSIZE          SAVE FINAL SIZE                      00001654
  1655.          TM    FLAGS2,MACBIN       MACBINARY TRANSFER?                  00001655
  1656.          BZ    SECTNBIN            NO, CONTINUE                         00001656
  1657.          S     R1,=F'128'          SUBTRACT SIZE OF HEADER              00001657
  1658. SECTNBIN LA    R1,127(R1)          GET NO. OF 128-BYTE SECTORS          00001658
  1659.          SRL   R1,7                                                     00001659
  1660.          STCM  R1,B'0011',SIZEDATA GET RESULT AS HEX CHARS              00001660
  1661.          UNPK  SIZECHAR(5),SIZEDATA(3)                                  00001661
  1662.          TR    SIZECHAR(4),HEXCHARS-240                                 00001662
  1663.          LM    R0,R15,SIZESAVE     RESTORE REGISTERS                    00001663
  1664.          BR    R14                 RETURN TO CALLER                     00001664
  1665.          SPACE                                                          00001665
  1666. SIZESAVE DS    16F                 LOCAL SAVE AREA                      00001666
  1667. TOTSIZE  DS    1F                  TOTAL SIZE BEFORE DIVISION           00001667
  1668. SIZEDATA DS    2X                  BUFFERS FOR CONVERSION               00001668
  1669.          DS    1X                                                       00001669
  1670. SIZECHAR DS    5X                                                       00001670
  1671.          DROP  R2                  DONE WITH FST                        00001671
  1672.          EJECT                                                          00001672
  1673. *                                                                       00001673
  1674. * GET MAC DATE AND TIME FROM CMS FILE DATE AND TIME                     00001674
  1675. *                                                                       00001675
  1676. MACDATE  DS    0H                  R1 -> FST                            00001676
  1677.          STM   R0,R15,DATESAVE     SAVE REGISTERS                       00001677
  1678.          LR    R2,R1               ADDRESS FST                          00001678
  1679.          USING FSTD,R2                                                  00001679
  1680.          MVC   DATECHAR(2),=C'19'                                       00001680
  1681.          UNPK  DATECHAR+2(15),FSTADATI(8)                               00001681
  1682.          LM    R0,R15,DATESAVE     RESTORE REGISTERS                    00001682
  1683.          BR    R14                 RETURN TO CALLER                     00001683
  1684.          SPACE                                                          00001684
  1685. DATESAVE DS    8D                  REGISTER SAVE AREA                   00001685
  1686. DATECHAR DS    17X                 MAC DATE AS DEC CHARS.               00001686
  1687.          DROP  R2                  DONE WITH FST                        00001687
  1688.          SPACE 1                                                        00001688
  1689. *                                                                       00001689
  1690. * CALCULATE CP/M DATE AND TIME FROM CMS FILE DATE AND TIME              00001690
  1691. *                                                                       00001691
  1692. CPMDATE  DS    0H                  R1 -> FST                            00001692
  1693.          STM   R0,R15,DATESAVE     SAVE REGISTERS                       00001693
  1694.          LR    R2,R1               ADDRESS FST                          00001694
  1695.          USING FSTD,R2                                                  00001695
  1696.          MVC   DATEBIN+2(2),FSTADATI+3  HOURS, MINUTES                  00001696
  1697.          SR    R1,R1               GET BINARY YEAR                      00001697
  1698.          IC    R1,FSTADATI                                              00001698
  1699.          LR    R3,R1               R3 = ONES                            00001699
  1700.          N     R3,=X'0000000F'                                          00001700
  1701.          SRL   R1,4                R1 = TENS                            00001701
  1702.          MH    R1,=H'10'                                                00001702
  1703.          AR    R1,R3               ADD ONES                             00001703
  1704.          STH   R1,YEAR             STORE RESULT                         00001704
  1705.          SR    R1,R1               GET BINARY MONTH                     00001705
  1706.          IC    R1,FSTADATI+1                                            00001706
  1707.          LR    R3,R1               R3 = ONES                            00001707
  1708.          N     R3,=X'0000000F'                                          00001708
  1709.          SRL   R1,4                R1 = TENS                            00001709
  1710.          MH    R1,=H'10'                                                00001710
  1711.          AR    R1,R3               ADD ONES                             00001711
  1712.          STH   R1,MONTH            STORE RESULT                         00001712
  1713.          SR    R1,R1               GET BINARY DAY                       00001713
  1714.          IC    R1,FSTADATI+2                                            00001714
  1715.          LR    R3,R1               R3 = ONES                            00001715
  1716.          N     R3,=X'0000000F'                                          00001716
  1717.          SRL   R1,4                R1 = TENS                            00001717
  1718.          MH    R1,=H'10'                                                00001718
  1719.          AR    R1,R3               ADD ONES                             00001719
  1720.          STH   R1,DAY              STORE RESULT                         00001720
  1721. *                                  CALCULATE JULIAN DATE                00001721
  1722.          LH    R5,YEAR             GET THE YEAR                         00001722
  1723.          LH    R7,MONTH            AND THE MONTH                        00001723
  1724.          S     R7,=F'3'            CHECK FOR JAN., FEB.                 00001724
  1725.          BNM   CTOJ1                                                    00001725
  1726.          LA    R7,12(R7)           ADD 12 TO MONTH                      00001726
  1727.          BCTR  R5,0                DECREMENT YEAR                       00001727
  1728. CTOJ1    SR    R4,R4               R4,R5 = (YEAR * 1461) / 4            00001728
  1729.          M     R4,=F'1461'                                              00001729
  1730.          D     R4,=F'4'                                                 00001730
  1731.          SR    R6,R6               R6,R7 = (153 * MONTH + 2) / 5        00001731
  1732.          M     R6,=F'153'                                               00001732
  1733.          LA    R7,2(R7)                                                 00001733
  1734.          D     R6,=F'5'                                                 00001734
  1735.          AR    R5,R7               ADD QUOTIENTS                        00001735
  1736.          AH    R5,DAY              ADD DAY                              00001736
  1737.          S     R5,=F'28430'        SUBTRACT 1 AND CP/M ADJUSTMENT       00001737
  1738.          BNM   USEJD               USE 0 IF NEGATIVE                    00001738
  1739.          SR    R5,R5                                                    00001739
  1740. USEJD    STH   R5,DATEBIN          STORE IN BINARY RESULT               00001740
  1741.          UNPK  DATECHAR(9),DATEBIN(5)  CONVERT TO HEX CHARACTERS        00001741
  1742.          TR    DATECHAR(8),HEXCHARS-240                                 00001742
  1743.          LM    R0,R15,DATESAVE     RESTORE REGISTERS                    00001743
  1744.          BR    R14                 RETURN TO CALLER                     00001744
  1745.          SPACE                                                          00001745
  1746. DATEBIN  DS    1F                  CP/M DATE                            00001746
  1747. YEAR     DS    1H                  BINARY YEAR                          00001747
  1748. MONTH    DS    1H                  BINARY MONTH                         00001748
  1749. DAY      DS    1H                  BINARY DAY                           00001749
  1750.          DROP  R2                  DONE WITH FST                        00001750
  1751.          SPACE 1                                                        00001751
  1752. *                                                                       00001752
  1753. * SUBROUTINE TO UPDATE TRANSFER RATE FROM LAST COMMAND TIMING           00001753
  1754. *                                                                       00001754
  1755. TIMEUPD  DS    0H                                                       00001755
  1756.          STM   R0,R15,TIMESAVE     SAVE REGISTERS                       00001756
  1757.          L     R1,WRCNT            GET TOTAL CHARACTER COUNT            00001757
  1758.          A     R1,RDCNT                                                 00001758
  1759.          C     R1,=F'160'          IGNORE IF < 160                      00001759
  1760.          BL    TIMERTN                                                  00001760
  1761.          A     R1,TOTCHRS          UPDATE TOTAL CHARACTERS              00001761
  1762.          ST    R1,TOTCHRS                                               00001762
  1763.          LM    R2,R3,ENDTIME       GET ELAPSED TIME                     00001763
  1764.          SRDL  R2,12               SHIFT TO GET MICROSECONDS            00001764
  1765.          LM    R4,R5,STRTTIME                                           00001765
  1766.          SRDL  R4,12                                                    00001766
  1767.          SLR   R3,R5               GET LOW-ORDER DIFFERENCE             00001767
  1768.          BNM   MSSUB               IF NO BORROW, READY FOR REST         00001768
  1769.          SL    R2,=F'1'            PERFORM BORROW                       00001769
  1770. MSSUB    SLR   R2,R4               GET HIGH-ORDER DIFFERENCE            00001770
  1771.          LM    R4,R5,TOTSECS       GET PREVIOUS TOTAL                   00001771
  1772.          ALR   R3,R5               GET LOW-ORDER SUM                    00001772
  1773.          BC    12,MSADD            IF NO CARRY, READY FOR REST          00001773
  1774.          AL    R2,=F'1'            PERFORM CARRY                        00001774
  1775. MSADD    ALR   R2,R4               GET HIGH-ORDER RUM                   00001775
  1776.          STM   R2,R3,TOTSECS       STORE NEW TOTAL                      00001776
  1777.          D     R2,=F'1000000'      DIVIDE BY 1000000 TO GET SECONDS     00001777
  1778.          C     R2,=F'500000'       IS REMAINDER MORE THAN HALF?         00001778
  1779.          BNH   USESECS             NO, KEEP QUOTIENT                    00001779
  1780.          AL    R3,=F'1'            ELSE ADD 1                           00001780
  1781. USESECS  LTR   R3,R3               ZERO SECONDS?                        00001781
  1782.          BZ    TIMERTN             YES, JUST RETURN                     00001782
  1783.          SR    R0,R0               R0,R1 = TOTAL CHARACTERS             00001783
  1784.          DR    R0,R3               DIVIDE TO GET CHARS./SECOND IN R1    00001784
  1785.          SRL   R3,1                R3 = HALF OF SECONDS                 00001785
  1786.          CR    R0,R3               IS REMAINDER MORE THAN HALF?         00001786
  1787.          BNH   USERATE             NO, KEEP QUOTIENT                    00001787
  1788.          AL    R1,=F'1'            ELSE ADD 1                           00001788
  1789. USERATE  CVD   R1,DECBUF           CONVERT TO PACKED DECIMAL            00001789
  1790.          UNPK  DECBUF(5),DECBUF+5(3) CONVERT TO CHARS.                  00001790
  1791.          OI    DECBUF+4,X'F0'      FIX FIRST NIBBLE OF LAST BYTE        00001791
  1792.          MVC   XFSPEED(4),DECBUF+1  UPDATE XFSPEED WITH RESULT          00001792
  1793. TIMERTN  LM    R0,R15,TIMESAVE     RESTORE REGISTERS                    00001793
  1794.          BR    R14                 RETURN                               00001794
  1795.          SPACE                                                          00001795
  1796. TIMESAVE DS    8D                  LOCAL SAVE AREA                      00001796
  1797.          EJECT                                                          00001797
  1798. *                                                                       00001798
  1799. * TERMTYPE - subroutine to determine terminal information and           00001799
  1800. *            set TRMFLAGS accordingly.  The 3270 console address        00001800
  1801. *            is also determined and saved.                              00001801
  1802. *                                                                       00001802
  1803. TERMTYPE DS    0H                                                       00001803
  1804.          STM   R0,R15,TRMSAVE      SAVE REGISTERS                       00001804
  1805.          L     R4,=F'-1'           GET CONSOLE ADDR. FROM CP            00001805
  1806.          DIAG  R4,R5,X'24'         GET CONSOLE CHARACTERISTICS          00001806
  1807.          BNZ   TRMDONE             IF ANY ERROR, TREAT AS ASCII         00001807
  1808.          STCM  R4,B'0011',CONADDR  SAVE CONSOLE ADDRESS                 00001808
  1809.          LA    R4,GRTSIZE          GET GRAFTAB SIZE                     00001809
  1810.          LA    R5,GRAFTAB          R5 -> START OF TABLE                 00001810
  1811. GRTLOOP  EQU   *                   CHECK FOR REAL 3270                  00001811
  1812.          CLM   R6,B'1100',0(R5)         CHECK REAL CLASS & TYPE         00001812
  1813.          BE    TRM3270                  HAVE A 3270 IF MATCH            00001813
  1814.          LA    R5,4(R5)                 R5 -> NEXT ENTRY                00001814
  1815.          BCT   R4,GRTLOOP               LOOP THROUGH TABLE              00001815
  1816.          B     TRMDONE             TREAT AS ASCII IF NO MATCH           00001816
  1817.          SPACE                                                          00001817
  1818. TRM3270  EQU   *                   NOW CHECK MODEL NUMBER               00001818
  1819.          TM    3(R5),WSF           MIGHT WSF BE SUPPORTED?              00001819
  1820.          BZ    MDLINIT             NO, SKIP TO MODEL TEST               00001820
  1821.          OI    TRMFLAGS,SFDEV      INDICATE WSF MAY WORK                00001821
  1822. MDLINIT  LA    R4,MDLSIZE          GET MDLTAB SIZE                      00001822
  1823.          LA    R5,MDLTAB           R5 -> START OF TABLE                 00001823
  1824. MDLLOOP  EQU   *                   SCAN FOR MATCHING MODEL              00001824
  1825.          CLM   R6,B'0010',0(R5)         COMPARE MODELS                  00001825
  1826.          BE    USE3270                  READY TO USE IF A MATCH         00001826
  1827.          LA    R5,3(R5)                 R5 -> NEXT ENTRY                00001827
  1828.          BCT   R4,MDLLOOP               LOOP THROUGH TABLE              00001828
  1829.          MVI   TRMFLAGS,0          TREAT AS ASCII IF NO MATCH           00001829
  1830.          B     TRMDONE                                                  00001830
  1831.          SPACE 1                                                        00001831
  1832. USE3270  OI    TRMFLAGS,GRAFTRM    INDICATE 3270 TERMINAL               00001832
  1833. *                                  CHECK FOR VTAM CONNECTION            00001833
  1834.          LA    R1,MSGOFF           R1 -> TERM BREAKIN COMMAND           00001834
  1835.          LA    R3,MSGOFFLB         R3 = COMMAND LENGTH                  00001835
  1836.          ICM   R3,B'1000',=X'40'   INDICATE RESPONSE IN A BUFFER        00001836
  1837.          L     R2,=A(RECVDATA)     R2 -> BUFFER                         00001837
  1838.          LA    R4,128              R4 = BUFFER LENGTH                   00001838
  1839.          DIAG  R1,R3,8             EXECUTE COMMAND                      00001839
  1840.          LTR   R3,R3               DID IT WORK?                         00001840
  1841.          BZ    NOTVTAM             YES, MUST NOT BE VTAM                00001841
  1842.          OI    TRMFLAGS,VTAM       SET VTAM FLAG                        00001842
  1843.          B     VTAMEND                                                  00001843
  1844.          SPACE                                                          00001844
  1845. NOTVTAM  LA    R1,MSGON            RESTORE BREAKIN DEFAULT              00001845
  1846.          LA    R3,MSGONLB                                               00001846
  1847.          DIAG  R1,R3,8                                                  00001847
  1848. VTAMEND  BAL   R14,BEGINFS         ENTER FULL-SCREEN MODE               00001848
  1849.          TM    TRMFLAGS,SFDEV      ANY POINT IN ISSUING WSF?            00001849
  1850.          BZ    TRMDONE             NO, JUST RETURN                      00001850
  1851. TRYWSF1  LA    R1,WSFCCW1          R1 -> WSF CCW                        00001851
  1852.          LH    R2,CONADDR          R2 = CONSOLE ADDRESS                 00001852
  1853.          ICM   R2,B'1000',=X'01'   INDICATE CMS CONSOLE                 00001853
  1854.          LA    R13,R13SAVE         R13 -> SAVE AREA                     00001854
  1855.          L     R15,=V(SCRIO)       R15 -> ENTRY POINT                   00001855
  1856.          BALR  R14,R15             EXECUTE WSF QUERY REPLY              00001856
  1857.          BZ    WSFREAD             IF OK, READ AND INTERPRET            00001857
  1858.          C     R15,=X'0000008E'    LINE-MODE INPUT WAITING?             00001858
  1859.          BNE   TRMDONE             NO, MUST NOT BE SUPPORTED            00001859
  1860.          L     R2,=A(RECVDATA)     R2 -> BUFFER                         00001860
  1861.          RDTERM (R2)               READ LINE MODE INPUT                 00001861
  1862.          B     TRYWSF1             TRY AGAIN                            00001862
  1863.          SPACE                                                          00001863
  1864. WSFREAD  BAL   R14,READ3270        READ RESPONSE INTO GRAFDATA          00001864
  1865.          L     R8,=A(GRAFDATA)     R8 ADDRESSES GRAFDATA                00001865
  1866.          USING GRAFDATA,R8                                              00001866
  1867.          LA    R2,GRAFDATA         R2 -> START OF DATA                  00001867
  1868.          LH    R3,GRAFLEN          R3 = LENGTH OF DATA                  00001868
  1869.          C     R3,=F'3'            AT LEAST AID AND LENGTH?             00001869
  1870.          BL    TRMDONE             IF NOT, NOTHING TO DO (STRANGE)      00001870
  1871.          CLI   0(R2),X'88'         CORRECT AID BYTE?                    00001871
  1872.          BNE   TRMDONE             NO, ALSO STRANGE                     00001872
  1873.          LA    R2,1(R2)            R2 -> FIRST FIELD                    00001873
  1874.          BCTR  R3,0                R3 = BYTES REMAINING                 00001874
  1875. *                                  LOOP TO PROCESS FIELDS               00001875
  1876. QRNEWFLD EQU   *                   START NEW FIELD                      00001876
  1877.          C     R3,=F'4'                 AT LEAST 4 BYTES LEFT?          00001877
  1878.          BL    TRMDONE                  NO, MUST BE DONE                00001878
  1879.          CLI   2(R2),X'81'              QUERY REPLY ID?                 00001879
  1880.          BNE   TRMDONE                  NO, CAN'T DEAL WITH THIS        00001880
  1881.          SR    R4,R4                    GET FIELD LENGTH IN R4          00001881
  1882.          ICM   R4,B'0011',0(R2)                                         00001882
  1883.          CR    R3,R4                    EXIT IF NOT THAT MUCH LEFT      00001883
  1884.          BL    TRMDONE                    (SHOULDN'T HAPPEN)            00001884
  1885.          CLI   3(R2),X'80'              SUMMARY CODE?                   00001885
  1886.          BNE   QRNXTFLD                 NO, TRY NEXT FIELD              00001886
  1887.          LA    R5,4(R2)                 R5 -> FIRST SUMMARY CODE        00001887
  1888.          LR    R6,R3                    R6 = COUNT OF CODES             00001888
  1889.          S     R6,=F'4'                                                 00001889
  1890.          BNP   TRMDONE                  DONE IF NOT > 0                 00001890
  1891. QRPQLP   EQU   *                        LOOK FOR RQPNAMES CODE          00001891
  1892.          CLI   0(R5),X'A1'                   FOUND THE CODE             00001892
  1893.          BE    FOUNDRPQ                      YES, PROCESS               00001893
  1894.          LA    R5,1(R5)                      R5 -> NEXT CODE            00001894
  1895.          BCT   R6,QRPQLP                     TRY NEXT                   00001895
  1896.          B     TRMDONE                  EXIT IF NOT FOUND               00001896
  1897.          SPACE                                                          00001897
  1898. QRNXTFLD AR    R2,R4                    INCREMENT POINTER               00001898
  1899.          SR    R3,R4                    DECREMENT BYTES LEFT            00001899
  1900.          B     QRNEWFLD                 REPEAT TO END OF DATA           00001900
  1901.          SPACE                                                          00001901
  1902. FOUNDRPQ EQU   *                   RETRIEVE RPQ NAMES DATA              00001902
  1903. TRYWSF2  LA    R1,WSFCCW2          R1 -> WSF CCW                        00001903
  1904.          LH    R2,CONADDR          R2 = CONSOLE ADDRESS                 00001904
  1905.          ICM   R2,B'1000',=X'01'   INDICATE CMS CONSOLE                 00001905
  1906.          LA    R13,R13SAVE         R13 -> SAVE AREA                     00001906
  1907.          L     R15,=V(SCRIO)       R15 -> ENTRY POINT                   00001907
  1908.          BALR  R14,R15             EXECUTE WSF QUERY REPLY              00001908
  1909.          BZ    RPQREAD             IF OK, READ AND INTERPRET            00001909
  1910.          C     R15,=X'0000008E'    LINE-MODE INPUT WAITING?             00001910
  1911.          BNE   TRMDONE             NO, MUST NOT BE SUPPORTED            00001911
  1912.          L     R2,=A(RECVDATA)     R2 -> INPUT BUFFER                   00001912
  1913.          RDTERM (R2)               READ LINE MODE INPUT                 00001913
  1914.          B     TRYWSF2             TRY AGAIN                            00001914
  1915.          SPACE                                                          00001915
  1916. RPQREAD  BAL   R14,READ3270        READ RESPONSE INTO GRAFDATA          00001916
  1917.          LH    R2,GRAFLEN          GET SIZE OF RESPONSE                 00001917
  1918.          C     R2,=F'19'           AT LEAST 19 BYTES?                   00001918
  1919.          BL    TRMDONE             NO, CAN'T USE                        00001919
  1920.          CLI   GRAFDATA,X'88'      QUERY REPLY AID?                     00001920
  1921.          BNE   TRMDONE             NO, CAN'T USE                        00001921
  1922.          CLC   GRAFDATA+3(2),=X'81A1'  CORRECT REPLY?                   00001922
  1923.          BNE   TRMDONE             NO, CAN'T USE                        00001923
  1924.          CLC   GRAFDATA+5(4),=C'GFTM'  CORRECT DEVICE?                  00001924
  1925.          BNE   TRMDONE             NO, CAN'T USE                        00001925
  1926.          OI    TRMFLAGS,MAC3270    SET MAC3270 FLAG                     00001926
  1927.          MVI   M3270VER,C'A'       'A' FOR APPLETALK                    00001927
  1928.          MVC   M3270VER+1(2),GRAFDATA+14  COPY VERSION                  00001928
  1929.          MVC   M3270VER+3(2),GRAFDATA+17                                00001929
  1930. TRMDONE  LM    R0,R15,TRMSAVE      RESTORE REGISTERS                    00001930
  1931.          BR    R14                 RETURN                               00001931
  1932. TRMSAVE  DS    8D                  LOCAL SAVE AREA                      00001932
  1933.          DROP  R8                  DONE ADDRESSING GRAFDATA             00001933
  1934.          SPACE                                                          00001934
  1935. * 3270 LIST OF RDEVTYPC, RDEVTYPE, ERASE/WRITE OR ERASE/WRITE ALT. BITS 00001935
  1936. * AND MASK FOR APL/TEXT SUPPORT                                         00001936
  1937. GRAFTAB  EQU   *                                                        00001937
  1938.          DC    AL1(CLASGRAF,TYP3277),X'80',AL1(0)      LOCAL 3277       00001938
  1939.          DC    AL1(CLASGRAF,TYP3278),X'C0',AL1(WSF)    LOCAL 3278,3279  00001939
  1940.          DC    AL1(CLASGRAF,TYP3276),X'C0',AL1(0)      LOCAL 3276       00001940
  1941.          DC    AL1(CLASGRAF,TYP3275),X'80',AL1(0)      LOCAL 3275       00001941
  1942.          DC    AL1(CLASTERM,TYP3277),X'80',AL1(0)      REMOTE 3277      00001942
  1943.          DC    AL1(CLASTERM,TYP3278),X'C0',AL1(WSF)    REMOTE 3278,3279 00001943
  1944.          DC    AL1(CLASTERM,TYP3276),X'C0',AL1(0)      REMOTE 3276      00001944
  1945.          DC    AL1(CLASTERM,TYP3275),X'80',AL1(0)      REMOTE 3275      00001945
  1946. GRTSIZE  EQU   (*-GRAFTAB)/4       NUMBER OF TABLE ENTRIES              00001946
  1947.          SPACE                                                          00001947
  1948. CLASTERM EQU   X'80'               TERMINAL DEVICE CLASS                00001948
  1949. CLASGRAF EQU   X'40'               GRAPHICS DEVICE CLASS                00001949
  1950. TYP3277  EQU   X'04'               3277 DISPLAY STATION                 00001950
  1951. TYP3276  EQU   X'03'               3276 DISPLAY STATION                 00001951
  1952. TYP3275  EQU   X'02'               3275 DISPLAY STATION                 00001952
  1953. TYP3278  EQU   X'01'               3278 DISPLAY STATION                 00001953
  1954. TYP3215  EQU   X'00'               3215 CONSOLE                         00001954
  1955.          SPACE                                                          00001955
  1956. WSF      EQU   X'01'               WSF IS POTENTIALLY SUPPORTED         00001956
  1957.          SPACE                                                          00001957
  1958. * TABLE OF MODEL NUMBER BYTE , ROW COUNT, AND SCREEN WIDTH              00001958
  1959. MDLTAB   EQU   *                                                        00001959
  1960.          DC    X'02',AL1(24),AL1(80)    24 ROWS, 80 COLUMNS             00001960
  1961.          DC    X'2A',AL1(20),AL1(80)    20 ROWS, 80 COLUMNS             00001961
  1962.          DC    X'03',AL1(32),AL1(80)    32 ROWS, 80 COLUMNS             00001962
  1963.          DC    X'04',AL1(43),AL1(80)    43 ROWS, 80 COLUMNS             00001963
  1964.          DC    X'05',AL1(27),AL1(132)   27 ROWS, 132 COLUMNS            00001964
  1965.          DC    X'01',AL1(12),AL1(80)    12 ROWS, 80 COLUMNS             00001965
  1966. MDLSIZE  EQU   (*-MDLTAB)/3        NUMBER OF TABLE ENTRIES              00001966
  1967.          EJECT                                                          00001967
  1968. *                                                                       00001968
  1969. * BEGINFS and ENDFS: subroutines to enter and leave 3270                00001969
  1970. *                    full-screen mode                                   00001970
  1971.          DS    0H                                                       00001971
  1972. BEGINFS  EQU   *                                                        00001972
  1973.          TM    TRMFLAGS,GRAFTRM    3270 TERMINAL?                       00001973
  1974.          BZR   R14                 NO, JUST IGNORE                      00001974
  1975.          TM    FLAGS,FS3270        ALREADY IN FULL-SCREEN MODE?         00001975
  1976.          BOR   R14                 YES, JUST RETURN                     00001976
  1977.          STM   R0,R15,FSSAVE       SAVE REGISTERS                       00001977
  1978.          LA    R1,MSGOFF           R1 -> CP COMMANDS                    00001978
  1979.          LA    R2,MSGOFFL          R2 = LENGTH                          00001979
  1980.          TM    TRMFLAGS,VTAM       VTAM CONNECTION?                     00001980
  1981.          BZ    OFFDIAG             NO, CONTINUE                         00001981
  1982.          LA    R1,MSGOFFV          R1 -> VTAM CP COMMANDS               00001982
  1983.          LA    R2,MSGOFFVL         R2 = LENGTH                          00001983
  1984. OFFDIAG  DIAG  R1,R2,8             EXECUTE COMMANDS TO SUPPRESS MSGS.   00001984
  1985.          LA    R1,CANCLCCW         R1 -> CANCEL CCW                     00001985
  1986.          LH    R2,CONADDR          R2 = CONSOLE ADDRESS                 00001986
  1987.          ICM   R2,B'1000',=X'01'   INDICATE CMS CONSOLE                 00001987
  1988.          LA    R13,R13SAVE         R13 -> SAVE AREA                     00001988
  1989.          L     R15,=V(SCRIO)       R15 -> ENTRY POINT                   00001989
  1990.          BALR  R14,R15             EXECUTE CANCEL CCW                   00001990
  1991. *                                  NOTE: INTERRUPTS ARE NOW DISABLED    00001991
  1992.          L     R1,=A(GRAFDATA)                                          00001992
  1993.          MVC   0(4,R1),=X'F3114040'  WRITE WCC, SBA                     00001993
  1994.          MVC   WCCWLEN(2),=H'4'    LENGTH (OF WCC) = 1                  00001994
  1995.          LA    R1,WCCW             R1 -> CCW                            00001995
  1996.          L     R15,=V(SCRIO)       R15 -> ENTRY POINT                   00001996
  1997.          BALR  R14,R15             ERASE/WRITE FOR FULL-SCREEN MODE     00001997
  1998.          OI    FLAGS,FS3270        REMEMBER IN FULL-SCREEN MODE         00001998
  1999.          LM    R0,R15,FSSAVE       RESTORE REGISTERS                    00001999
  2000.          BR    R14                 RETURN TO CALLER                     00002000
  2001.          SPACE                                                          00002001
  2002. ENDFS    EQU   *                   END FULL-SCREEN MODE                 00002002
  2003.          TM    FLAGS,FS3270        IN FULL-SCREEN MODE?                 00002003
  2004.          BZR   R14                 NO, JUST RETURN                      00002004
  2005.          STM   R0,R15,FSSAVE       SAVE REGISTERS                       00002005
  2006.          LH    R2,CONADDR          R2 = CONSOLE ADDRESS                 00002006
  2007.          ICM   R2,B'1000',=X'01'   INDICATE CMS CONSOLE                 00002007
  2008.          LA    R13,R13SAVE         R13 -> SAVE AREA                     00002008
  2009.          L     R1,=A(GRAFDATA)                                          00002009
  2010.          MVC   0(4,R1),=X'F1114040'  WRITE CCW, SBA                     00002010
  2011.          MVC   WCCWLEN(2),=H'4'    LENGTH (OF WCC) = 1                  00002011
  2012.          LA    R1,WCCW             R1 -> CCW                            00002012
  2013.          L     R15,=V(SCRIO)       R15 -> ENTRY POINT                   00002013
  2014.          BALR  R14,R15             CLEAR SCREEN, LOCK KEYBOARD          00002014
  2015.          SSM   =X'FF'              RESTORE INTERRUPTS                   00002015
  2016.          LA    R1,MSGON            R1 -> CP COMMANDS                    00002016
  2017.          LA    R2,MSGONL           R2 = LENGTH                          00002017
  2018.          TM    TRMFLAGS,VTAM       VTAM CONNECTION?                     00002018
  2019.          BZ    ONDIAG              NO, CONTINUE                         00002019
  2020.          LA    R1,MSGONV           R1 -> VTAM CP COMMANDS               00002020
  2021.          LA    R2,MSGONVL          R2 = LENGTH                          00002021
  2022. ONDIAG   DIAG  R1,R2,8             EXECUTE COMMANDS TO ALLOW MSGS.      00002022
  2023.          NI    FLAGS,255-FS3270    REMEMBER NOT IN FULL-SCREEN MODE     00002023
  2024.          LM    R0,R15,FSSAVE       RESTORE REGISTERS                    00002024
  2025.          BR    R14                 RETURN TO CALLER                     00002025
  2026.          SPACE                                                          00002026
  2027. FSSAVE   DS    8D                  LOCAL SAVE AREA                      00002027
  2028. R13SAVE  DS    12D                 STANDARD SAVE AREA FOR SCRIO         00002028
  2029. CANCLCCW DC    X'1900000020FF0001' DISPW CANCEL CCW                     00002029
  2030. MSGOFF   DC    C'TERM BREAKIN GUESTCTL'  CP COMMANDS FOR NO MESSAGES    00002030
  2031. MSGOFFLB EQU   *-MSGOFF            LENGTH OF TERM BREAKIN COMMAND       00002031
  2032.          DC    X'15'                                                    00002032
  2033.          DC    C'SET WNG OFF'                                           00002033
  2034.          DC    X'15'                                                    00002034
  2035.          DC    C'SET ACNT OFF'                                          00002035
  2036. MSGOFFL  EQU   *-MSGOFF                                                 00002036
  2037. MSGON    DC    C'TERM BREAKIN IMMED'  CP COMMANDS TO RESTORE MESSAGES   00002037
  2038. MSGONLB  EQU   *-MSGON                LENGTH OF TERM BREAKIN COMMAND    00002038
  2039.          DC    X'15'                                                    00002039
  2040.          DC    C'SET WNG ON'                                            00002040
  2041.          DC    X'15'                                                    00002041
  2042.          DC    C'SET ACNT ON'                                           00002042
  2043. MSGONL   EQU   *-MSGON                                                  00002043
  2044. MSGOFFV  DC    C'SET MSG OFF'      VTAM CP COMMANDS FOR NO MESSAGES     00002044
  2045.          DC    X'15'                                                    00002045
  2046.          DC    C'SET WNG OFF'                                           00002046
  2047.          DC    X'15'                                                    00002047
  2048.          DC    C'SET ACNT OFF'                                          00002048
  2049. MSGOFFVL EQU   *-MSGOFFV                                                00002049
  2050. MSGONV   DC    C'SET MSG ON'       VTAM CP COMMANDS TO RESTORE MESSAGES 00002050
  2051.          DC    X'15'                                                    00002051
  2052.          DC    C'SET WNG ON'                                            00002052
  2053.          DC    X'15'                                                    00002053
  2054.          DC    C'SET ACNT ON'                                           00002054
  2055. MSGONVL  EQU   *-MSGONV                                                 00002055
  2056.          EJECT                                                          00002056
  2057. *                                                                       00002057
  2058. * READ3270: Wait for attention from console and issue read-modified     00002058
  2059. *                                                                       00002059
  2060. READ3270 DS    0H                                                       00002060
  2061.          STM   R0,R15,RDMSAVE      SAVE REGISTERS                       00002061
  2062.          DMSKEY NUCLEUS            NEED SYSTEM KEY FOR PSWS             00002062
  2063. RDWAIT   EQU   *                   DO READ-MODIFIED AFTER ATTN          00002063
  2064.          MVC   SAVEPSW(8),IONPSW   SAVE CURRENT I/O NEW PSW             00002064
  2065.          LA    R1,FINWAIT          STORE NEW INTERRUPT ADDRESS          00002065
  2066.          ST    R1,IONPSW+4                                              00002066
  2067.          MVC   SAVEEXT(8),EXTNPSW  ALSO SAVE EXTERNAL NEW PSW           00002067
  2068.          LA    R1,EXTINT           STORE NEW EXT. INT. ADDRESS          00002068
  2069.          ST    R1,EXTNPSW+4                                             00002069
  2070. LPSW     EQU   *                                                        00002070
  2071.          LPSW  WAIT                < < < W A I T > > >                  00002071
  2072. EXTINT   EQU   *                                                        00002072
  2073.          MVC   IONPSW(8),SAVEPSW   RESTORE PSWS                         00002073
  2074.          MVC   EXTNPSW(8),SAVEEXT                                       00002074
  2075.          LA    R1,RDWAIT           TELL CMS WHERE TO GO BACK            00002075
  2076.          ST    R1,EXTOPSW+4                                             00002076
  2077.          NI    EXTOPSW+1,255-2     RESET WAIT BIT                       00002077
  2078.          NI    EXTOPSW,0           DON'T RE-ENABLE INTERRUPTS YET       00002078
  2079.          LPSW  SAVEEXT             PASS INTERRUPT TO CMS                00002079
  2080.          SPACE                                                          00002080
  2081. FINWAIT  EQU   *                                                        00002081
  2082.          MVC   IONPSW(8),SAVEPSW   RESTORE PSWS                         00002082
  2083.          MVC   EXTNPSW(8),SAVEEXT                                       00002083
  2084.          CLC   IOOPSW+2(2),CONADDR IS IT THE VIRTUAL CONSOLE?           00002084
  2085.          BE    CHKATTN             YES, CHECK FOR ATTENTION             00002085
  2086. CMSINT   EQU   *                   HAVE CMS HANDLE INTERRUPT            00002086
  2087.          LA    R1,RDWAIT           TELL CMS WHERE TO GO BACK            00002087
  2088.          ST    R1,IOOPSW+4                                              00002088
  2089.          NI    IOOPSW+1,255-2      RESET WAIT BIT                       00002089
  2090.          NI    IOOPSW,0            DON'T RE-ENABLE INTERRUPTS YET       00002090
  2091.          LPSW  SAVEPSW             PASS INTERRUPT TO CMS                00002091
  2092.          SPACE                                                          00002092
  2093. CHKATTN  TM    CSW+4,X'80'         IS THIS ATTN?                        00002093
  2094.          BZ    CMSINT              NO, PASS IT TO CMS                   00002094
  2095.          LA    R1,RCCW             R1 -> READ-MODIFIED CCW              00002095
  2096.          LH    R2,CONADDR          R2 = CONSOLE ADDRESS                 00002096
  2097.          ICM   R2,B'1000',=X'01'   INDICATE CMS CONSOLE                 00002097
  2098.          LA    R13,R13SAVE         R13 -> SAVE AREA                     00002098
  2099.          L     R15,=V(SCRIO)       R15 -> ENTRY POINT                   00002099
  2100.          BALR  R14,R15             DO FULL-SCREEN READ                  00002100
  2101.          BNZ   RDERR               CHECK FOR ANY ERROR                  00002101
  2102.          L     R1,=F'4096'         BYTES READ = BUFFER LENGTH           00002102
  2103.          SR    R1,R0                 - RESIDUAL COUNT                   00002103
  2104.          STH   R1,GRAFLEN          STORE READ LENGTH                    00002104
  2105.          B     RDMRTN              READY TO RETURN                      00002105
  2106.          SPACE                                                          00002106
  2107. RDERR    SR    R1,R1               FOR ERROR, RETURN SIZE 0             00002107
  2108.          STH   R1,GRAFLEN                                               00002108
  2109. RDMRTN   DMSKEY RESET              RESTORE USER KEY                     00002109
  2110.          LM    R0,R15,RDMSAVE      RESTORE REGISTERS                    00002110
  2111.          BR    R14                 RETURN TO CALLER                     00002111
  2112.          SPACE                                                          00002112
  2113. RDMSAVE  DS    8D                  LOCAL SAVE AREA                      00002113
  2114. SAVEPSW  DS    1D                  SAVED PSWS                           00002114
  2115. SAVEEXT  DS    1D                                                       00002115
  2116. WAIT     DC    X'FF060000',AL4(LPSW)  WAIT STATE PSW                    00002116
  2117.          EJECT                                                          00002117
  2118. *                                                                       00002118
  2119. * LONGTR - execute TR for arbitrary length string                       00002119
  2120. *          R0 -> table, R1 -> string, R2 = length                       00002120
  2121. *                                                                       00002121
  2122. LONGTR   DS    0H                                                       00002122
  2123.          STM   R0,R5,TRSAVE        SAVE REGISTERS                       00002123
  2124.          LR    R4,R0               R4 -> TRANSLATE TABLE                00002124
  2125.          LR    R3,R2               R3 = BYTES LEFT                      00002125
  2126.          SRL   R3,8                SHIFT TO GET BCT COUNT               00002126
  2127.          LTR   R3,R3               IF ZERO, SKIP LOOP                   00002127
  2128.          BZ    TREND                                                    00002128
  2129. LTRLOOP  EQU   *                   LOOP FOR 256-BYTE PIECES             00002129
  2130.          TR    0(256,R1),0(R4)          DO THIS PIECES                  00002130
  2131.          LA    R1,256(R1)               INCREMENT ADDRESS               00002131
  2132.          S     R2,=F'256'               DECREMENT LENGTH                00002132
  2133.          BCT   R3,LTRLOOP                                               00002133
  2134. TREND    LTR   R2,R2               RETURN IF NO BYTES LEFT              00002134
  2135.          BZ    TRRTN                                                    00002135
  2136.          BCTR  R2,0                DECREMENT FOR EXECUTE                00002136
  2137.          EX    R2,TRINST                                                00002137
  2138. TRRTN    LM    R0,R5,TRSAVE        RESTORE REGISTERS                    00002138
  2139.          BR    R14                 RETURN                               00002139
  2140.          SPACE                                                          00002140
  2141. TRSAVE   DS    3D                  LOCAL REGISTER SAVE AREA             00002141
  2142. TRINST   TR    0(*-*,R1),0(R4)     INSTRUCTION FOR EX                   00002142
  2143.          EJECT                                                          00002143
  2144. *                                                                       00002144
  2145. * GETID - Invoke IDENTIFY to get the local node id.  Set the            00002145
  2146. *         node id to blanks if any error.                               00002146
  2147. *                                                                       00002147
  2148.          SPACE                                                          00002148
  2149. GETID    DS    0H                                                       00002149
  2150.          STM   R14,R1,GETSAVE      SAVE REGISTERS                       00002150
  2151.          MVC   NODEID(8),=CL8' '   INITIALIZE NODE ID TO BLANKS         00002151
  2152.          LA    R1,IDPLIST          EXECUTE IDENTIFY                     00002152
  2153.          SVC   202                                                      00002153
  2154.          DC    AL4(1)                                                   00002154
  2155.          LTR   R15,R15             JUST RETURN IF ANY ERRORS            00002155
  2156.          BNZ   GETIDRTN                                                 00002156
  2157.          RDTERM RDRESP             GET RESPONSE                         00002157
  2158.          C     R0,=F'19'           AT LEAST 19 BYTES?                   00002158
  2159.          BL    GETIDRTN            NO, JUST RETURN                      00002159
  2160.          MVC   NODEID(8),RDRESP+12  COPY NODEID FROM IDENITFY           00002160
  2161. GETIDRTN LM    R14,R1,GETSAVE      RESTORE REGISTERS                    00002161
  2162.          BR    R14                 RETURN                               00002162
  2163.          SPACE                                                          00002163
  2164. GETSAVE  DS    2D                  SAVE AREA: R14, R15, R0, R1          00002164
  2165. IDPLIST  DS    0D                                                       00002165
  2166.          DC    CL8'IDENTIFY'       IDENTIFY COMMAND                     00002166
  2167.          DC    CL8'('                                                   00002167
  2168.          DC    CL8'LIFO'                                                00002168
  2169.          DC    8X'FF'                                                   00002169
  2170.          EJECT                                                          00002170
  2171. *                                                                       00002171
  2172. * WMAC DATA AREA:                                                       00002172
  2173. *                                                                       00002173
  2174.          SPACE                                                          00002174
  2175. FSTCOPY  DS    8D                  COPY OF FST                          00002175
  2176. DECBUF   DS    2D                  BUFFER FOR CONVERSIONS               00002176
  2177. STRTTIME DS    1D                  START TIME FOR RATE CALC.            00002177
  2178. ENDTIME  DS    1D                  END TIME FOR RATE CALC.              00002178
  2179. TOTSECS  DS    1D                  TOTAL ELAPSED TIME                   00002179
  2180. WCCW     DS    0D                  3270 WRITE CCW                       00002180
  2181.          DC    X'29'                    OP-CODE                         00002181
  2182.          DC    AL3(GRAFDATA)            BUFFER ADDRESS                  00002182
  2183.          DC    X'20'                    CCW FLAG BITS                   00002183
  2184.          DC    X'80'                    CONTROL BITS FOR CP             00002184
  2185. WCCWLEN  DC    AL2(*-*)                 LENGTH                          00002185
  2186. WSFCCW1  DS    0D                  3270 WSF CCW                         00002186
  2187.          DC    X'29'                    OP-CODE                         00002187
  2188.          DC    AL3(WSFQRCMD)            BUFFER ADDRESS                  00002188
  2189.          DC    X'20'                    CCW FLAG BITS                   00002189
  2190.          DC    X'20'                    CONTROL BITS FOR CP             00002190
  2191.          DC    AL2(5)                   LENGTH                          00002191
  2192. WSFCCW2  DS    0D                  3270 WSF CCW                         00002192
  2193.          DC    X'29'                    OP-CODE                         00002193
  2194.          DC    AL3(WSFRPQ)              BUFFER ADDRESS                  00002194
  2195.          DC    X'20'                    CCW FLAG BITS                   00002195
  2196.          DC    X'20'                    CONTROL BITS FOR CP             00002196
  2197.          DC    AL2(7)                   LENGTH                          00002197
  2198. WSFCCW3  DS    0D                  3270 WSF CCW                         00002198
  2199.          DC    X'29'                    OP-CODE                         00002199
  2200.          DC    AL3(GRAFDATA)            BUFFER ADDRESS                  00002200
  2201.          DC    X'20'                    CCW FLAG BITS                   00002201
  2202.          DC    X'20'                    CONTROL BITS FOR CP             00002202
  2203. WSFCCWLN DC    AL2(*-*)                 LENGTH                          00002203
  2204. RCCW     DS    0D                  3270 READ CCW                        00002204
  2205.          DC    X'2A'                    OP-CODE                         00002205
  2206.          DC    AL3(GRAFDATA)            BUFFER ADDRESS                  00002206
  2207.          DC    X'20'                    CCW FLAG BITS                   00002207
  2208.          DC    X'80'                    CONTROL BITS FOR CP             00002208
  2209.          DC    AL2(4096)                LENGTH                          00002209
  2210. NODEID   DS    1D                  MY NODEID                            00002210
  2211. BROWNID  DC    CL8'BROWNVM'        NODE ID AT BROWN                     00002211
  2212. BUFSIZE  DS    1F                  NO. OF BYTES IN INPBUF               00002212
  2213. PCKSIZE  DS    1F                  PACKET SIZE                          00002213
  2214. RETRYCNT DS    1F                  RETRY COUNT FOR ALL BLOCKS           00002214
  2215. BLOCKNO  DS    1F                  CP/M BLOCK NUMBER                    00002215
  2216. WRCNT    DS    1F                  BYTES WRITTEN FOR RATE CALC.         00002216
  2217. RDCNT    DS    1F                  BYTES READ FOR RATE CALC.            00002217
  2218. TOTCHRS  DS    1F                  TOTAL CHARACTERS FOR RATE CALC.      00002218
  2219. INTAB    DS    1A                  SAVED USER INPUT TABLE               00002219
  2220. OUTTAB   DS    1A                  SAVED USER OUTPUT TABLE              00002220
  2221. INPBUFDW DS    1F              (1) DOUBLEWORDS FOR INPBUF               00002221
  2222. INPBUF   DS    1A              (2) BUFFER FOR CMS FILE DATA             00002222
  2223.          EJECT                                                          00002223
  2224. OPTTAB   DS    0F                  OPTION PROCESSING TABLE              00002224
  2225.          DC    CL8'ASCII',AL4(ASCOPT)                                   00002225
  2226.          DC    CL8'BINARY',AL4(BINOPT)                                  00002226
  2227.          DC    CL8'MACBIN',AL4(MACOPT)                                  00002227
  2228.          DC    CL8'MENU',AL4(MENUOPT)                                   00002228
  2229.          DC    CL8'NOASCII',AL4(NOASCOPT)                               00002229
  2230.          DC    CL8'NOBINARY',AL4(NOBINOPT)                              00002230
  2231.          DC    CL8'NOMACBIN',AL4(NOMACOPT)                              00002231
  2232.          DC    CL8'NOMENU',AL4(NOMENOPT)                                00002232
  2233.          DC    CL8'NOPRINT',AL4(NOPRTOPT)                               00002233
  2234.          DC    CL8'PRINT',AL4(PRTOPT)                                   00002234
  2235.          DC    CL8'STDXLATE',AL4(STDXOPT)                               00002235
  2236.          DC    CL8'TEXT',AL4(TEXTOPT)                                   00002236
  2237.          DC    CL8'TRUNCATE',AL4(TRUNCOPT)                              00002237
  2238.          DC    8X'FF',AL4(-1)                                           00002238
  2239. INFILE   FSCB  FORM=E              INPUT FILE CONTROL BLOCK             00002239
  2240. MACID    DC    CL17' '             MAC FILE ID                          00002240
  2241. DELIM    DC    C' '                DEFAULT DELIMITER                    00002241
  2242. SENDLEN  DS    1H                  BYTE COUNT FOR SEND BUFFER           00002242
  2243. RECVLEN  DS    1H                  BYTE COUNT FOR RECEIVE BUFFER        00002243
  2244. GRAFLEN  DS    1H                  BYTE COUNT FOR 3270 BUFFER           00002244
  2245. CONADDR  DS    1H                  3270 CONSOLE ADDRESS                 00002245
  2246. WSFQRCMD DC    X'000501FF02'       WSF QUERY REPLY COMMAND              00002246
  2247. WSFRPQ   DC    X'000701FF0300A1'   WSF QUERY LIST FOR RPQ NAMES         00002247
  2248. CTLFS    DC    X'2E2E'             CTL-F (ACK) START XFER CODES         00002248
  2249. ABORTSTR DC    X'02022F'           START BYTES AND CTL-G                00002249
  2250. ABRTSTRC DC    X'02022D'                                                00002250
  2251. RETRYMSG DC    C'Retransmitting command',X'15'                          00002251
  2252.          DC    X'2D'               BELL AT END OF MESSAGE               00002252
  2253. RMSGL    EQU   *-RETRYMSG          MESSAGE LENGTH                       00002253
  2254. DSKMODE  DC    CL2' '              DISK MODE FOR ERROR MESSAGE          00002254
  2255. PRMTCMD  DC    AL1(PRMTCMDL)       CP PROMPT COMMAND FOR LINEDIT        00002255
  2256.          DC    C'TERM PROMPT >',X'12'                                   00002256
  2257. PRMTCMDL EQU   *-PRMTCMD-1                                              00002257
  2258. VERSDATA DS    5C                  VERSION DATA                         00002258
  2259. M3270VER DS    5C                  MAC3270 VERSION DATA (FROM WSF)      00002259
  2260. XFSPEED  DS    4C                  TRANSFER SPEED, CPS                  00002260
  2261. RDRESP   DC    CL130' '            RDTERM RESPONSE BUFFER               00002261
  2262. FLAGS    DS    1X                  FLAG BYTE                            00002262
  2263. FINIS    EQU   X'01'                    CALL FINIS FOR INPUT FILE       00002263
  2264. RDREC    EQU   X'02'                    DATA HAS BEEN READ              00002264
  2265. XFS      EQU   X'04'                    XFSPEED IS SUPPORTED            00002265
  2266. NOMENU   EQU   X'08'                    HAVE MAC SKIP FILE MENU         00002266
  2267. TEXT     EQU   X'10'                    TEXT OPTION SPECIFIED           00002267
  2268. BLNKLINE EQU   X'20'                    LAST LINE WAS BLANK             00002268
  2269. FS3270   EQU   X'40'                    3270 IN FULL SCREEN MODE        00002269
  2270. TRUNCATE EQU   X'80'                    TRUNCATE OPTION SPECIFIED       00002270
  2271. FLAGS2   DS    1X                  SECOND FLAG BYTE                     00002271
  2272. BINXF    EQU   X'01'                    BINARY TRANSFER                 00002272
  2273. TERMINIT EQU   X'02'                    TERMINAL INIT. DONE             00002273
  2274. ASCBIN   EQU   X'04'                    ASCII<-->BINARY SUPPORTED       00002274
  2275. COMP     EQU   X'08'                    DATA COMPRESSION SUPPORTED      00002275
  2276. ASCXF    EQU   X'10'                    ASCII TRANSFER FORCED           00002276
  2277. IOBUFF   EQU   X'20'                    INPBUF ALLOCATED                00002277
  2278. MACBIN   EQU   X'40'                    MACBINARY TRANSFER              00002278
  2279. PRTXF    EQU   X'80'                    DOWNLOAD TO PRINTER             00002279
  2280. FLAGS3   DS    1X                  THIRD FLAG BYTE                      00002280
  2281. ALTTR    EQU   X'01'                    USE ALT. (LOCAL) XLATE TABLES   00002281
  2282. TRMFLAGS DS    1X                  FLAG BYTE FOR TERMINAL STATUS        00002282
  2283. SFDEV    EQU   X'01'                    WSF MAY BE SUPPORTED            00002283
  2284. GRAFTRM  EQU   X'02'                    3270 TERMINAL                   00002284
  2285. MAC3270  EQU   X'04'                    MAC3270 IN USE                  00002285
  2286. VTAM     EQU   X'08'                    VTAM CONNECTION                 00002286
  2287.          LTORG                                                          00002287
  2288. SENDSTRT DC    2X'02'              HEADER: 2 START BYTES                00002288
  2289. SENDDATA DS    CL2328              SEND DATA BUFFER                     00002289
  2290. RECVDATA DS    CL128               RECEIVE DATA BUFFER                  00002290
  2291. GRAFDATA DS    512D                3270 I/O BUFFER                      00002291
  2292. ABINDATA DS    130D                ASCBIN BUFFER                        00002292
  2293.          EJECT                                                          00002293
  2294. TOASCBRN DS 0D            BROWN'S CP EBCDIC TO ASCII TRANSLATE TABLE    00002294
  2295.          DC X'000102037F097F7F7F7F7F0B0C0D0E0F'   *....".""""".....*    00002295
  2296.          DC X'101112137F0A087F18197F7F1C1D1E1F'   *....".."..""....*    00002296
  2297.          DC X'7F7F1C7F7F0A171B7F7F7F7F7F050607'   *"".""..."""""...*    00002297
  2298.          DC X'7F7F167F7F1E7F047F7F7F1314157F1A'   *"".""."."""...".*    00002298
  2299.          DC X'207F7F7F7F7F7F7F7F7F5B2E3C282B5E'   *."""""""""$....;*    00002299
  2300.          DC X'267F7F7F7F7F7F7F7F7F21242A293B7E'   *.""""""""".....=*    00002300
  2301.          DC X'2D2F7F7F7F7F7F7F7F7F7C2C255F3E3F'   *..""""""""@..^..*    00002301
  2302.          DC X'7F7F7F7F7F7F7F7F607F3A2340273D22'   *""""""""-".. ...*    00002302
  2303.          DC X'7F6162636465666768697F7B7F7F7F7F'   *"/........"#""""*    00002303
  2304.          DC X'7F6A6B6C6D6E6F7071727F7D7F7F7F7F'   *".,%_>?..."'""""*    00002304
  2305.          DC X'7F7F737475767778797A7F7F7F5B7F7F'   *"".......:"""$""*    00002305
  2306.          DC X'7F7F7F7F7F7F7F7F7F7F7F7F7F5D7F7F'   *""""""""""""")""*    00002306
  2307.          DC X'7F4142434445464748497F7F7F7F7F7F'   *".........""""""*    00002307
  2308.          DC X'7F4A4B4C4D4E4F5051527F7F7F7F7F7F'   *"..<(+|&..""""""*    00002308
  2309.          DC X'5C7F535455565758595A7F7F7F7F7F7F'   **".......!""""""*    00002309
  2310.          DC X'303132333435363738397F7F7F7F7F7F'   *..........""""""*    00002310
  2311.          SPACE                                                          00002311
  2312. FRASCBRN DS    0D         BROWN'S CP ASCII TO EBCDIC TRANSLATE TABLE    00002312
  2313.          DC    X'00010203372D2E2F1605250B0C0D0E0F'                      00002313
  2314.          DC    X'FF11123B3C3D322618193F271C1D1E1F'                      00002314
  2315.          DC    X'405A7F7B5B6C507D4D5D5C4E6B604B61'                      00002315
  2316.          DC    X'F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F'                      00002316
  2317.          DC    X'7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6'                      00002317
  2318.          DC    X'D7D8D9E2E3E4E5E6E7E8E9ADE0BD4F6D'                      00002318
  2319.          DC    X'78818283848586878889919293949596'                      00002319
  2320.          DC    X'979899A2A3A4A5A6A7A8A98B6A9B5F07'                      00002320
  2321.          DC    X'00010203372D2E2F1605250B0C0D0E0F'                      00002321
  2322.          DC    X'FF11123B3C3D322618193F271C1D1E1F'                      00002322
  2323.          DC    X'405A7F7B5B6C507D4D5D5C4E6B604B61'                      00002323
  2324.          DC    X'F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F'                      00002324
  2325.          DC    X'7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6'                      00002325
  2326.          DC    X'D7D8D9E2E3E4E5E6E7E8E9ADE0BD4F6D'                      00002326
  2327.          DC    X'78818283848586878889919293949596'                      00002327
  2328.          DC    X'979899A2A3A4A5A6A7A8A98B6A9B5F07'                      00002328
  2329.          EJECT                                                          00002329
  2330. TRTABBRN DC    256AL1(*-TRTABBRN)  BROWN INVALID CHARACTER TABLE        00002330
  2331.          ORG   TRTABBRN                                                 00002331
  2332.          DC    64C'║'                                                   00002332
  2333.          ORG   TRTABBRN+X'05'      ALLOW TAB                            00002333
  2334.          DC    X'05'                                                    00002334
  2335.          ORG   TRTABBRN+X'0C'      ALLOW FORM FEED                      00002335
  2336.          DC    X'0C'                                                    00002336
  2337.          ORG   TRTABBRN+X'41'                                           00002337
  2338.          DC    10C'║'                                                   00002338
  2339.          ORG   TRTABBRN+X'51'                                           00002339
  2340.          DC    9C'║'                                                    00002340
  2341.          ORG   TRTABBRN+X'62'                                           00002341
  2342.          DC    8C'║'                                                    00002342
  2343.          ORG   TRTABBRN+X'70'                                           00002343
  2344.          DC    8C'║',X'78',C'║'                                         00002344
  2345.          ORG   TRTABBRN+X'80'                                           00002345
  2346.          DC    C'║'                                                     00002346
  2347.          ORG   TRTABBRN+X'8A'                                           00002347
  2348.          DC    C'║'                                                     00002348
  2349.          ORG   TRTABBRN+X'8C'                                           00002349
  2350.          DC    5C'║'                                                    00002350
  2351.          ORG   TRTABBRN+X'9A'                                           00002351
  2352.          DC    C'║'                                                     00002352
  2353.          ORG   TRTABBRN+X'9C'                                           00002353
  2354.          DC    6C'║'                                                    00002354
  2355.          ORG   TRTABBRN+X'AA'                                           00002355
  2356.          DC    3C'║'                                                    00002356
  2357.          ORG   TRTABBRN+X'AE'                                           00002357
  2358.          DC    15C'║'                                                   00002358
  2359.          ORG   TRTABBRN+X'BE'                                           00002359
  2360.          DC    3C'║'                                                    00002360
  2361.          ORG   TRTABBRN+X'CA'                                           00002361
  2362.          DC    7C'║'                                                    00002362
  2363.          ORG   TRTABBRN+X'DA'                                           00002363
  2364.          DC    6C'║'                                                    00002364
  2365.          ORG   TRTABBRN+X'E1'                                           00002365
  2366.          DC    C'║'                                                     00002366
  2367.          ORG   TRTABBRN+X'EA'                                           00002367
  2368.          DC    6C'║'                                                    00002368
  2369.          ORG   TRTABBRN+X'FA'                                           00002369
  2370.          DC    6C'║'                                                    00002370
  2371.          ORG                                                            00002371
  2372.          EJECT                                                          00002372
  2373. TOASCSTD DS 0D                   STANDARD CP EBCDIC TO ASCII TABLE      00002373
  2374.          DC X'000102037F097F7F7F7F7F0B0C0D0E0F' *....".""""".....*      00002374
  2375.          DC X'101112137F0A080018197F7F1C1D1E1F' *....".....""....*      00002375
  2376.          DC X'7F7F7F7F7F0A171B7F7F7F7F7F050607' *"""""..."""""...*      00002376
  2377.          DC X'7F7F167F7F7F7F047F7F7F7F14157F1A' *""."""".""""..".*      00002377
  2378.          DC X'207F7F7F7F7F7F7F7F7F7F2E3C282B7C' *.""""""""""....@*      00002378
  2379.          DC X'267F7F7F7F7F7F7F7F7F21242A293B5E' *.""""""""".....;*      00002379
  2380.          DC X'2D2F7F7F7F7F7F7F7F7F7C2C255F3E3F' *..""""""""@..^..*      00002380
  2381.          DC X'7F7F7F7F7F7F7F7F7F603A2340273D22' *"""""""""-.....*       00002381
  2382.          DC X'7F6162636465666768697F7F7F7F7F7F' *"/........""""""*      00002382
  2383.          DC X'7F6A6B6C6D6E6F7071727F7F7F7F7F7F' *".,%_>?...""""""*      00002383
  2384.          DC X'7F7E737475767778797A7F7F7F5B7F7F' *"=.......:"""$""*      00002384
  2385.          DC X'7F7F7F7F7F7F7F7F7F7F7F7F7F5D7F7F' *""""""""""""")""*      00002385
  2386.          DC X'7B4142434445464748497F7F7F7F7F7F' *#.........""""""*      00002386
  2387.          DC X'7D4A4B4C4D4E4F5051527F7F7F7F7F7F' *'║.<(+|&..""""""*      00002387
  2388.          DC X'5C7F535455565758595A7F7F7F7F7F7F' **".......!""""""*      00002388
  2389.          DC X'303132333435363738397F7F7F7F7F7F' *..........""""""*      00002389
  2390.          SPACE                                                          00002390
  2391. FRASCSTD DS    0D                STANDARD CP ASCII TO EBCDIC TABLE      00002391
  2392.          DC    X'00010203372D2E2F1605250B0C0D0E0F'                      00002392
  2393.          DC    X'101112133C3D322618193F271C1D1E1F'                      00002393
  2394.          DC    X'405A7F7B5B6C507D4D5D5C4E6B604B61'                      00002394
  2395.          DC    X'F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F'                      00002395
  2396.          DC    X'7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6'                      00002396
  2397.          DC    X'D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D'                      00002397
  2398.          DC    X'79818283848586878889919293949596'                      00002398
  2399.          DC    X'979899A2A3A4A5A6A7A8A9C04FD0A107'                      00002399
  2400.          DC    X'00010203372D2E2F1605250B0C0D0E0F'                      00002400
  2401.          DC    X'101112133C3D322618193F271C1D1E1F'                      00002401
  2402.          DC    X'405A7F7B5B6C507D4D5D5C4E6B604B61'                      00002402
  2403.          DC    X'F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F'                      00002403
  2404.          DC    X'7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6'                      00002404
  2405.          DC    X'D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D'                      00002405
  2406.          DC    X'79818283848586878889919293949596'                      00002406
  2407.          DC    X'979899A2A3A4A5A6A7A8A9C04FD0A107'                      00002407
  2408.          EJECT                                                          00002408
  2409. TRTABSTD DC    256AL1(*-TRTABSTD)  STANDARD INVALID CHARACTER TABL      00002409
  2410.          ORG   TRTABSTD                                                 00002410
  2411.          DC    64C'║'                                                   00002411
  2412.          ORG   TRTABSTD+X'05'      ALLOW TAB                            00002412
  2413.          DC    X'05'                                                    00002413
  2414.          ORG   TRTABSTD+X'0C'      ALLOW FORM FEED                      00002414
  2415.          DC    X'0C'                                                    00002415
  2416.          ORG   TRTABSTD+X'41'                                           00002416
  2417.          DC    10C'║'                                                   00002417
  2418.          ORG   TRTABSTD+X'51'                                           00002418
  2419.          DC    9C'║'                                                    00002419
  2420.          ORG   TRTABSTD+X'62'                                           00002420
  2421.          DC    8C'║'                                                    00002421
  2422.          ORG   TRTABSTD+X'70'                                           00002422
  2423.          DC    9C'║'                                                    00002423
  2424.          ORG   TRTABSTD+X'80'                                           00002424
  2425.          DC    C'║'                                                     00002425
  2426.          ORG   TRTABSTD+X'8A'                                           00002426
  2427.          DC    7C'║'                                                    00002427
  2428.          ORG   TRTABSTD+X'9A'                                           00002428
  2429.          DC    7C'║'                                                    00002429
  2430.          ORG   TRTABSTD+X'AA'                                           00002430
  2431.          DC    3C'║'                                                    00002431
  2432.          ORG   TRTABSTD+X'AE'                                           00002432
  2433.          DC    15C'║'                                                   00002433
  2434.          ORG   TRTABSTD+X'BE'                                           00002434
  2435.          DC    2C'║'                                                    00002435
  2436.          ORG   TRTABSTD+X'CA'                                           00002436
  2437.          DC    6C'║'                                                    00002437
  2438.          ORG   TRTABSTD+X'DA'                                           00002438
  2439.          DC    6C'║'                                                    00002439
  2440.          ORG   TRTABSTD+X'E1'                                           00002440
  2441.          DC    C'║'                                                     00002441
  2442.          ORG   TRTABSTD+X'EA'                                           00002442
  2443.          DC    6C'║'                                                    00002443
  2444.          ORG   TRTABSTD+X'FA'                                           00002444
  2445.          DC    6C'║'                                                    00002445
  2446.          ORG                                                            00002446
  2447.          SPACE 2                                                        00002447
  2448. TOLOWER  DC    256AL1(*-TOLOWER)   UPPER -> LOWERCASE XTAB              00002448
  2449.          ORG   TOLOWER+C'^'        "^" -> BLANK                         00002449
  2450.          DC    C' '                                                     00002450
  2451.          ORG   TOLOWER+C'A'                                             00002451
  2452.          DC    C'abcdefghi'                                             00002452
  2453.          ORG   TOLOWER+C'J'                                             00002453
  2454.          DC    C'jklmnopqr'                                             00002454
  2455.          ORG   TOLOWER+C'S'                                             00002455
  2456.          DC    C'stuvwxyz'                                              00002456
  2457.          ORG                                                            00002457
  2458.          EJECT                                                          00002458
  2459. ABINTAB  DC    256X'00'            TABLE FOR BINARY QUOTING             00002459
  2460.          ORG   ABINTAB+X'00'                                            00002460
  2461.          DC    X'03'               NULL -> X'03'                        00002461
  2462.          DC    8X'15'              X'01' - X'08' QUOTED                 00002462
  2463.          DC    X'00'               TAB SENT AS IS                       00002463
  2464.          DC    X'0B'               LF -> X'0B'                          00002464
  2465.          DC    X'15'               X'0B' QUOTED                         00002465
  2466.          DC    X'00'               FF SENT AS IS                        00002466
  2467.          DC    X'0E'               CR -> X'OE'                          00002467
  2468.          DC    10X'15'             X'0E' - X'17' QUOTED                 00002468
  2469.          DC    X'00'               X'18' SENT AS IS                     00002469
  2470.          DC    7X'15'              X'19' - X'1F' QUOTED                 00002470
  2471.          ORG   ABINTAB+X'7F'                                            00002471
  2472.          DC    49X'15'             X'7F' - X'AF' QUOTED                 00002472
  2473.          DC    80X'16'             X'B0' - X'FF' QUOTED                 00002473
  2474.          ORG                                                            00002474
  2475. HBITTAB  DC    128AL1(*-HBITTAB+128) TABLE TO TURN ON HIGH-ORDER        00002475
  2476.          DC    128AL1(*-HBITTAB)     BIT FOR 7171                       00002476
  2477.          FSCBD                                                          00002477
  2478.          FSTD                                                           00002478
  2479.          NUCON                                                          00002479
  2480.          END                                                            00002480
  2481.